|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.06.2007, 14:04 | #1 |
Форумчанин
Регистрация: 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. |
18.06.2007, 14:34 | #2 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
Как-то не совсем понятно, а что, собственно, не получается? Нужно рассчитать координады или запомнить последние координаты?
|
18.06.2007, 14:37 | #3 |
Форумчанин
Регистрация: 22.05.2007
Сообщений: 511
|
Нужно сделать так чтобы конечные координаты первой прямой были начальными координатами второй прямой и т.д.
|
18.06.2007, 15:08 | #4 |
Форумчанин
Регистрация: 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; Может быть я чего-то не понял. |
18.06.2007, 15:18 | #5 |
Форумчанин
Регистрация: 22.05.2007
Сообщений: 511
|
Нет не то. В Edit1 вводится расстояние, Edit2 вводится время, Edit3 азимут. Так вот по этим данным должна строиться прямая и конечные координаты этой прямой являются начальными координатами следующей
|
18.06.2007, 21:10 | #6 |
Телепат с дипломом
Старожил
Регистрация: 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. |
19.06.2007, 08:04 | #7 |
Форумчанин
Регистрация: 22.05.2007
Сообщений: 511
|
Я немножко торможу . Не понял что мне сделать? Если можно дай код.
|
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 |
Форумчанин
Регистрация: 22.05.2007
Сообщений: 511
|
Да так но как это сделать вот в чем вопрос.
|
19.06.2007, 11:15 | #10 |
Пользователь
Регистрация: 30.05.2007
Сообщений: 16
|
Вроде уже все объяснили, что не понятно... Давай на пальцах: представь, что ты держишь карандаш. Команда MoveTo - это тоже самое, что ты передвигаешь руку в воздухе. Команда LineTo - ведешь карандашом по бумаге. В LineTo передаются координаты только одной точки, значит линия начинается оттуда, где в момент вызова LineTo находился карандаш. Получается, MoveTo сдвинула "руку с карандашом" в определенную точку, а несколько подряд идущих команд LineTo - рисуют линии "не отрывая руки". Получается, что для 2-ой команды LineTo начальной точкой является конечная точка 1-ой команды LineTo... Ну, вроде проще некуда объяснить
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Построение поверхностей | 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 |