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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2007, 14:04   #1
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию Построение прямых

У меня возникло небольшое затруднение. Если кто сможет то пожалуйста помогите. Проблема вот в чем. Я пишу программу для туристов "Электронная карта" (т.е. в PaintBox загоняется рисунок карты или создается сам так как имеются условные обозначения , карандаш и т.д. имеются поля ввода расстояния, времени и азимута). И программа должна прорисовать весь маршрут который я ввожу.
За начало я выбираю точку. Задача вот в чем координаты конечной точки должны быть начальными координатами для следующих прямых.
вот часть кода (здесь вводятся x , у и угол а)
var
x:integer; // аргумент функции
y:integer ; // значение функции в точке x
a:integer;
x0:integer; // аргумент функции
y0:integer;
begin
with MainForm.Canvas do
begin
x0:=StrtoInt(MainForm.Edit1.Text);
y0:=StrtoInt(MainForm.Edit2.Text);
a:=StrtoInt(MainForm.Edit3.Text);
x:=x0*(a);
y:=y0*(a);

MoveTo(300+x,y-a);LineTo(x,y);

Последний раз редактировалось Aleksandr; 18.06.2007 в 14:21.
Aleksandr вне форума Ответить с цитированием
Старый 18.06.2007, 14:34   #2
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Как-то не совсем понятно, а что, собственно, не получается? Нужно рассчитать координады или запомнить последние координаты?
Jeni вне форума Ответить с цитированием
Старый 18.06.2007, 14:37   #3
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Нужно сделать так чтобы конечные координаты первой прямой были начальными координатами второй прямой и т.д.
Aleksandr вне форума Ответить с цитированием
Старый 18.06.2007, 15:08   #4
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Тогда завести две глобальные переменные (или поля класса). После того, как рассчитаны все координаты, записать что-то вроде этого:
MoveTo(BegX, BegY);
LineTo(X, Y);
BegX := X;
BegY := Y;

Сами BegX и BegY инициализировать в начале работы (например = -1) и в обработчике нажатия кнопки мыши
if (BegX = -1) or (BegY := -1) then
begin
BegX := X;
BegY := Y;
end;

Может быть я чего-то не понял.
Jeni вне форума Ответить с цитированием
Старый 18.06.2007, 15:18   #5
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Нет не то. В Edit1 вводится расстояние, Edit2 вводится время, Edit3 азимут. Так вот по этим данным должна строиться прямая и конечные координаты этой прямой являются начальными координатами следующей
Aleksandr вне форума Ответить с цитированием
Старый 18.06.2007, 21:10   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Ты когда указываешь параметры в LineTo, ты же указываешь начальную и конечную точки. А раз указываешь конечную, значит она тебе известна. Что же тебе надо найти?

Вернее конечную, начальную указываешь в MoveTo. Заменить MoveTo можно присваивая значение свойству PenPos.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 18.06.2007 в 23:02.
mutabor вне форума Ответить с цитированием
Старый 19.06.2007, 08:04   #7
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Я немножко торможу . Не понял что мне сделать? Если можно дай код.
Aleksandr вне форума Ответить с цитированием
Старый 19.06.2007, 08:19   #8
Сильванович Михаил
Студент
Форумчанин
 
Регистрация: 10.11.2006
Сообщений: 196
По умолчанию

Когда ты строишь прямую по этим данным ты используешь MoveTo(x0,y0: integer) и LineTo(x,y: integer)
Это означает, что координаты обоих концов отрезка (x0;y0)-(x;y) тебе известны.
т.е. MoveTo(x,y) - будет началом (по твоему коду) следующего отрезка,
концом того, что ты отрисовал.
Visita Interiorem Terrae Rectificando Operae Lapidem...
Сильванович Михаил вне форума Ответить с цитированием
Старый 19.06.2007, 09:55   #9
Aleksandr
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 511
По умолчанию

Да так но как это сделать вот в чем вопрос.
Aleksandr вне форума Ответить с цитированием
Старый 19.06.2007, 11:15   #10
Still_Learn
Пользователь
 
Регистрация: 30.05.2007
Сообщений: 16
По умолчанию

Вроде уже все объяснили, что не понятно... Давай на пальцах: представь, что ты держишь карандаш. Команда MoveTo - это тоже самое, что ты передвигаешь руку в воздухе. Команда LineTo - ведешь карандашом по бумаге. В LineTo передаются координаты только одной точки, значит линия начинается оттуда, где в момент вызова LineTo находился карандаш. Получается, MoveTo сдвинула "руку с карандашом" в определенную точку, а несколько подряд идущих команд LineTo - рисуют линии "не отрывая руки". Получается, что для 2-ой команды LineTo начальной точкой является конечная точка 1-ой команды LineTo... Ну, вроде проще некуда объяснить
Still_Learn вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение поверхностей pushok Помощь студентам 1 04.02.2008 08:06
Построение графиков на C# TheGuardian123 Общие вопросы .NET 2 29.01.2008 14:50
(С++) Построение графика tg(x)=y. Panterka Помощь студентам 2 13.12.2007 09:32
Построение диаграммы Владислав Крюков Microsoft Office Excel 12 14.11.2007 23:50