Дуга и граф
- From
- Alexey Burdin (2:5012/2.89)
- To
- Alexander Pashchenko
- Date
- 2003-01-05T03:59:20Z
- Area
- RU.ALGORITHMS
> from: /Unknown/
Как после вчерашнего, Alexander ?
21:56 Суббота Январь 04 2003, Alexander Pashchenko --> All:
AP> 1. Поскольку я пишу на Паскале, можно попытаться воспользоваться
AP> борландовской процей вывода дуги Arc (x,y,StartAng,EndAng,Radius),
меня радует, что ты наконец-то на ней остановился.
Пусть у тебя есть 3 точки - (x1,y1), (x2,y2), (x3,y3).
Необходимо найти такие x,y,R, что
{ (x1-x)^2+(y1-y)^2=R^2
{ (x2-x)^2+(y2-y)^2=R^2
{ (x3-x)^2+(y3-y)^2=R^2
Отсюда
(x2-x1)(x1+x2-2x)+(y2-y1)(y1+y2-2y)=0 |*(x3-x1)
(x3-x1)(x1+x3-2x)+(y3-y1)(y1+y3-2y)=0 |*(x2-x1)
(x3-x1)(x2-x1)(x1+x2-2x)+(x3-x1)(y2-y1)(y1+y2-2y)=0
(x2-x1)(x3-x1)(x1+x3-2x)+(x2-x1)(y3-y1)(y1+y3-2y)=0
отсюда
(x3-x1)(x2-x1)(x3-x2)+(x3-x1)(y2-y1)(y1+y2-2y)+(x2-x1)(y3-y1)(y1+y3-2y)=0
что эквивалентно
(x3-x1)(x2-x1)(x3-x2)+(x3-x1)(y2-y1)(y1+y2)+(x2-x1)(y3-y1)(y1+y3)=
=2y*((x3-x1)(y2-y1)+(x2-x1)(y3-y1)), получаем
y=((x3-x1)(x2-x1)(x3-x2)+(x3-x1)(y2-y1)(y1+y2)+(x2-x1)(y3-y1)(y1+y3))/
/((x3-x1)(y2-y1)+(x2-x1)(y3-y1))/2
Из симметрии задачи x= той же формуле с помененными x на y, у на х,
х1 на у1, у1 на х1 и т.д.
Если то, на что делишь, =0, то имеем прямую. (Line)
R=sqrt((x1-x)^2+(y1-y)^2)
Я думаю, ты бы сам смог это проделать.
Теперь надо найти угол на окружности, соответствующий каждой точке.
Возьмём (x1,y1).
При x1>x, y1>y a=arctg(abs(y1-y)/abs(x1-x));
при x1=x, y1>y a=pi/2;
при x1<x, y1>y a=arctg(abs(y1-y)/abs(x1-x))+pi/2;
при x1<x, y1=y a=pi;
при x1<x, y1<y a=arctg(abs(y1-y)/abs(x1-x))+pi;
при x1=x, y1<y a=3*pi/2;
при x1>x, y1<y a=arctg(abs(y1-y)/abs(x1-x))+3*pi/2;
Угол а в радианах, угол в градусах равет 180*a/pi.
AP> Так вот. Тут стоит задача преобразовать данные даные нам для
AP> построения дуги, в данные нужные для процедуры Arc
Рассуждения и формулы выше, надеюсь тебе поможет. Также надеюсь, что без
глюков.
2алл: кто видит ошибки в мной-выше-написанном, подправьте, пожалуйста.
AP> 2. Найти формулу(ы), высчитывающую координаты каждой точким будующей
AP> дуги, которая использует только представленные данные.
А вообще-то в давнем Спектруме была процедура DRAW. (аналог LineRel)
Так вот у неё можно было задавать изгиб линии третьим параметром. :)
Всего хорошего. Alexey.
... А что подyмал кpолик, никто не yзнал,
--- потомy что кpолик был очень воспитанный.
* Origin: And he likes to sing along (2:5012/2.89)