Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Alexey Burdin                        2:5012/2.89    05 Jan 2003  04:59:20
 To : Alexander Pashchenko
 Subject : Дуга и граф
 -------------------------------------------------------------------------------- 
 
 > 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).
     Hеобходимо найти такие 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. Hайти формулу(ы), высчитывающую координаты каждой точким будующей
  AP> дуги, которая использует только представленные данные.
 
     А вообще-то в давнем Спектруме была процедура DRAW. (аналог LineRel)
     Так вот у неё можно было задавать изгиб линии третьим параметром. :)
                 Всего хорошего. Alexey.
 ... А что подyмал кpолик, никто не yзнал,
 --- потомy что кpолик был очень воспитанный.
  * Origin: And he likes to sing along (2:5012/2.89)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Дуга и граф   Alexander Pashchenko   04 Jan 2003 22:56:44 
 Дуга и граф   Alexey Burdin   05 Jan 2003 04:59:20 
Архивное /ru.algorithms/28283e17b5e6.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional