Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2011, 22:08   #1
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию LineTo для текста или матрицы

Здраствуйте. Подскажите, как написать процедуру аналогичную LineTo, но для текста или матрицы. Допустим у есть массив 100 Х 100 з разных символов. Нужно скажем из точки 10, 10 в точку 25, 25 провести линию из одинаковых символов (заменить существующие). Спасибо.
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 28.07.2011, 22:17   #2
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
Радость

Цитата:
Сообщение от apromix Посмотреть сообщение
Здраствуйте. Подскажите, как написать процедуру аналогичную LineTo, но для текста или матрицы. Допустим у есть массив 100 Х 100 з разных символов. Нужно скажем из точки 10, 10 в точку 25, 25 провести линию из одинаковых символов (заменить существующие). Спасибо.
для примера
http://delphi-faq.net/grafika_igry/2...ii-lineto.html (Нарисовать линию, не используя функции LineTo)
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 28.07.2011, 22:31   #3
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

можно к примеру так:
изначально найти меньшее расстояние по осям между точками (между позициями в матрице то есть), затем поделить большее расстояние на меньшее и получим некий коэффициент, далее начиная от левой верхней позиции начинать циклом заполнять матрицу, на каждой итерации присваивая по оси, где было минимальное расстояние - единицу, по второй оси - получившийся коэффициент
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 30.07.2011, 12:14   #4
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

http://ru.wikipedia.org/wiki/%D0%90%...8D%D0%BC%D0%B0
http://ru.wikipedia.org/wiki/DDA
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 01.08.2011, 08:28   #5
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Спасибо всем Реализовал так (для алгоритма FOV):

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Math;

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Display;
    procedure LineTo(X, Y: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.LineTo(X, Y: Integer);
var
  I, L: integer;
  LR: Real;
  B: TPoint;
  AX, AY: Integer;
begin
  B.X := 100;
  B.Y := 100;
  L := Max(Abs(B.X - X), Abs(B.Y - Y));
  for I := 0 to L do
  begin
    LR := I / L;
    AX := B.X + Round((X - B.X) * LR);
    AY := B.Y + Round((Y - B.Y) * LR);
    if Canvas.Pixels[AX, AY] = clRed then Break;
    Canvas.Pixels[AX, AY] := clBlack;   
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Display;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Display;
end;

procedure TForm1.Display;
var
  C: TPoint;
  I: Integer;
begin
  for I:= 0 to 100 do
  begin
    Randomize;
    Canvas.Pixels[Round(Random(200)), Round(Random(200))] := clRed;
  end;
  
  for I := 0 to 200 do LineTo(I, 0);
  for I := 0 to 200 do LineTo(200, I);
  for I := 200 downto 0 do LineTo(I, 200);
  for I := 200 downto 0 do LineTo(0, I);
end;

end.
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 01.08.2011, 10:12   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

apromix, не понял, какое отношение эта Ваша программа имеет к исходному заданию (матрица символов)...

и ещё. вынесите Randomize из цикла.
а ещё лучше - вообще из процедуры Display уберите. сделайте его на событие Form OnCreate (или хотя бы на событие onShow)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что лучше для поиска текста: string::find или strstr()? WebbMan Общие вопросы C/C++ 1 20.06.2011 23:00
Рисование кругов инструментом LineTo Anubys Помощь студентам 3 06.03.2011 20:46
Изменение параметров процедуры lineto. vedro-compota Мультимедиа в Delphi 2 07.06.2010 21:53
LineTo рисование на экране - lineto(0,1000,1000) - LineTo(DC, 1000, 1000); Crivel Общие вопросы Delphi 8 23.05.2009 22:30
PUZZLEWORD. Программа или скрипт для генерации текста. avelin375 Фриланс 1 15.05.2008 10:44