![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
Isolator |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: ![]() ![]() ![]() |
Народ. Срочно нужна ваша помощь. Подскажите как в Pascal (Unit Graph) отложить точку симметричную какой либо прямой, либо отрезка и как понять что эта точка пересекла отрезок (задается как две точки). Желательно выложить формулы plz.(Собственно говоря мне надо написать прогу, в которой летит точка и отбивается от произвольных отрезков(random двух точек). и без того, что я написал выше, ее не напишешь). Буду очень благодарен.
|
klem4 |
![]()
Сообщение
#2
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Вспомни курс геометрии, по двум точкам получай уравнение прямой, а потом проверяй принадлежит ли 3-я точка данной прямой.
Воспоьзуйся поиском по форуму, подобная задача наверняка решалась. Сообщение отредактировано: klem4 - 26.03.2006 8:49 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
NorthAngel |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 25 Пол: Женский Репутация: ![]() ![]() ![]() |
Сталкивалась с подобным вопросом =))
Отложить точку, если правильно поняла суть, можно так: сначала узнаем k и b уравнения прямой оси симметрии (т.к. y=kx+b), затем находим k и b прямой, проходящей через заданную точку и перпендикулярной оси симметрии, координате х искомой точке присваиваем значение длины перпендикуляра, умноженного на два. Вторую координату из уравнения прямой. Получить всё это можно преобразованием трех формул: 1) Уравнение прямой из данной точки с данным k: y=k(x-x3)+y3; (x3,y3)-координаты точки. 2) через две точки: (y-y2)/(y2-y1)=(x-x2)/(x2-x1). 3) зависимость угловых коэффициентов перпендикулярных п-х: k1*k2=-1. Код uses crt, Graph; var i, gd, gm : integer; x , y: array[1..4] of integer; {координаты 1,2-прямой, 3-данной точки, 4-искомой точки} ptd : string; k1,b1,k2,b2 : real; {k и b 1-данной прямой, 2-прямой,ей перпендикулярной} begin clrscr; for i:= 1 to 3 do begin write('x',i,'= '); read(x[i]); write('y',i,'= '); read(y[i]); end; gm:= 2; gd:= detect; ptd:=''; InitGraph(gd,gm,ptd); Line(x[1], y[1], x[2], y[2]); k1:= (y[2]-y[1])/(x[2]-x[1]); b1:= -1*((x[1]*y[2])/(x[2]-x[1])-(x[2]*y[1])/(x[2]-x[1])); k2:= -1/((y[2]-y[1])/(x[2]-x[1])); b2:= -k2*x[3]+y[3]; y[3]:= trunc(k2*x[3] + b2); x[4]:= trunc((b2-b1)/(k1-k2)); x[4]:= x[4]+(x[4]-x[3]); y[4]:= trunc(k2*x[4] + b2); PutPixel(x[3],y[3],10); PutPixel(x[4],y[4],10); readkey; end. Хотя, мне кажется, это какой-то нерациональный алгоритм ![]() Сообщение отредактировано: NorthAngel - 27.03.2006 6:32 -------------------- ошибки легче всего делаются и труднее всего находятся в самых простых местах программы =))
|
![]() ![]() |
![]() |
Текстовая версия | 17.07.2025 19:49 |