IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Графические алгоритмы., Выручайте
Isolator
сообщение 25.03.2006 22:23
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Мужской

Репутация: -  0  +


Народ. Срочно нужна ваша помощь. Подскажите как в Pascal (Unit Graph) отложить точку симметричную какой либо прямой, либо отрезка и как понять что эта точка пересекла отрезок (задается как две точки). Желательно выложить формулы plz.(Собственно говоря мне надо написать прогу, в которой летит точка и отбивается от произвольных отрезков(random двух точек). и без того, что я написал выше, ее не напишешь). Буду очень благодарен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 26.03.2006 8:49
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Вспомни курс геометрии, по двум точкам получай уравнение прямой, а потом проверяй принадлежит ли 3-я точка данной прямой.

Воспоьзуйся поиском по форуму, подобная задача наверняка решалась.

Сообщение отредактировано: klem4 - 26.03.2006 8:49


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
NorthAngel
сообщение 26.03.2006 20:51
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 25
Пол: Женский

Репутация: -  0  +


Сталкивалась с подобным вопросом =))
Отложить точку, если правильно поняла суть, можно так: сначала узнаем 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.


Хотя, мне кажется, это какой-то нерациональный алгоритм norespect.gif

Сообщение отредактировано: NorthAngel - 27.03.2006 6:32


--------------------
ошибки легче всего делаются и труднее всего находятся в самых простых местах программы =))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 17.07.2025 19:49
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"