Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.12.2011, 21:15
brutalis brutalis вне форума
Новичок
 
Регистрация: 20.05.2011
Сообщения: 51
Репутация: 10
По умолчанию нарисовать две перпендикулярных прямых

требуется нарисовать две прямых пересекающихся под прямым углом. как это лучше сделать, чтобы не на глаз. в дальнейшем ожидается что они будут двигаться по окружности. во вложении изображено как это должно приблизительно выглядеть
Изображения
Тип файла: jpg Безымянный.JPG (5.0 Кбайт, 26 просмотров)
Ответить с цитированием
  #2  
Старый 12.12.2011, 21:22
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Открываем учебник школьной геометрии, видим там формулу тангенса угла между прямыми в зависимости от коэффициентов tgA = (k2-k1)/(1+k1/k2), вспоминаем, чему равен тангенс прямого угла, понимаем, что для этого надо в знаменателе заиметь 0, решаем уравнение k1=-1/k2, радуемся результату.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 12.12.2011, 21:25
brutalis brutalis вне форума
Новичок
 
Регистрация: 20.05.2011
Сообщения: 51
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
Открываем учебник школьной геометрии, видим там формулу тангенса угла между прямыми в зависимости от коэффициентов tgA = (k2-k1)/(1+k1/k2), вспоминаем, чему равен тангенс прямого угла, понимаем, что для этого надо в знаменателе заиметь 0, решаем уравнение k1=-1/k2, радуемся результату.

пробовал. вот только она у меня от вертикальной оси строить пытается.
и математика это одно. а как это програмно описать
Ответить с цитированием
  #4  
Старый 12.12.2011, 21:26
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Значит некорректный алгоритм построения. k есть тангенс угла от горизонтальной оси.
А вообще алгоритм элементарен:
Код:
y1 := k*x1+b;
y2 := k*x2+b;

Canvas.MoveTo(x1,y1);
Canvas.LineTo(x2,y2);
Программно описать алгоритм -
Код:
k2 := -1/k1;

И строим как выше.

З.Ы. Прибавка, на всякий случай. На форме ось Y направлена вниз.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 12.12.2011 в 21:33.
Ответить с цитированием
  #5  
Старый 12.12.2011, 21:28
brutalis brutalis вне форума
Новичок
 
Регистрация: 20.05.2011
Сообщения: 51
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
Значит некорректный алгоритм построения. k есть тангенс угла от горизонтальной оси.
даже если так. как ни пробовал не получается. пока на глаз построил. но при движении по окружности угол в 90 не выдерживется
Ответить с цитированием
  #6  
Старый 14.12.2011, 21:52
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Если ты уж можешь первую линию поворачивать, то что мешает также после поворота первой поворачивать вторую вокруг новой точки (угол первой-90 градусов), по умолчанию ставив вторую линию сначала на 0 градуссов?
Ответить с цитированием
  #7  
Старый 14.12.2011, 22:37
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,020
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Мля... ну что за...
уравнение прямой: y = k*x + a
уравнение перпендикулярной к первой прямой будет y = (1/k)*x + a.

Дальше элементарная математика для определения k по 2м чточкам и a если у тебя еть одна из точек.
Ответить с цитированием
  #8  
Старый 14.12.2011, 22:43
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Как я понял ето дубль темы http://www.delphisources.ru/forum/sh...ad.php?t=19396 Там ему нужны не прямые, а отрезки, и сам код нужно полностью переработать.
Ответить с цитированием
  #9  
Старый 15.12.2011, 00:58
Delirium Delirium вне форума
Прохожий
 
Регистрация: 25.11.2011
Адрес: Москва
Сообщения: 6
Версия Delphi: 2006, XE2
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Мля... ну что за...
уравнение прямой: y = k*x + a
уравнение перпендикулярной к первой прямой будет y = (1/k)*x + a.
уравнение перпендикулярной к первой прямой будет y = - (1/k)*x + a.
Ответить с цитированием
  #10  
Старый 15.12.2011, 02:54
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,020
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Delirium
уравнение перпендикулярной к первой прямой будет y = - (1/k)*x + a.

Ну по памяти писал, мог и ошибиться
Тем более, что знаешь.

1. Берешь 2 точки для первого отрезка (одна из них - та, куда будет примыкать второй отрезок).
2. Вращаешь их вокруг некоторого центра врашения.
3. Вычисляешь коэф. для первого отрезка, чертишь его.
4. Вычисляешь коэф. для второго отрезка.
5. Вычисляешь a для второго отрезка.
6. Вычисляешь вторую точку для второго отрзка.
7. Рисуешь второй отрезок.

а вообще, можно просто взять 4 точки и все их вращать вокруг общего центра и по ним чертить.
Ответить с цитированием
  #11  
Старый 15.12.2011, 20:35
brutalis brutalis вне форума
Новичок
 
Регистрация: 20.05.2011
Сообщения: 51
Репутация: 10
По умолчанию

Цитата:
Сообщение от YVitaliy
Как я понял ето дубль темы http://www.delphisources.ru/forum/sh...ad.php?t=19396 Там ему нужны не прямые, а отрезки, и сам код нужно полностью переработать.

ну не совсем дубль. там другой вопрос поднимается. и что в коде переработать?
Ответить с цитированием
  #12  
Старый 15.12.2011, 20:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,020
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А я откуда знаю, что надо переработать? Кода, полного, я не видел. Точного описания задачи тоже...
Да и, пожалуй, проще просто переписать по тому алгоритму, что предложен. И вообще подумать над тем, что бы просто вращать (или двигать по окружности, тут тоже есть небольшая разница) 4 точки, по которым просто чертить отрезки.
Ответить с цитированием
  #13  
Старый 15.12.2011, 21:38
brutalis brutalis вне форума
Новичок
 
Регистрация: 20.05.2011
Сообщения: 51
Репутация: 10
По умолчанию

вот он код
Вложения
Тип файла: rar kinematik.rar (212.9 Кбайт, 7 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter