|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/28283e17b5e6.html, оценка из 5, голосов 10
|