Дуга и граф

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)