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


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Serg Belyaev                         2:5015/166.7   09 Nov 2001  02:26:37
 To : Oleg Polubasoff
 Subject : [* - гео] - середина дуги
 -------------------------------------------------------------------------------- 
 
 08-Nov-01 17:32:50, Oleg Polubasoff wrote to All
           Subject: [* - гео] - середина дуги
 
  OP>     Сразу скажу, подвох в том, что координаты точек даются не абсолютно
  OP> точно, а с погрешностью. Пусть координаты округлены до целых.
  OP> Hапример, точки         (100.2, 10) и   (100, 12)
  OP> могут быть даны как A = (100, 10) и B = (100, 12),
  OP> а точки (100.4999, -0.2) и (100.5001, 0) -
  OP> как A = (100, 0)     и B = (101, 0).
  OP>     Можно считать, что  A и B расположены достаточно далеко от C.
  OP> При любых данных нужно бы выдать правдоподобный результат.
 
  OP>     Линейного решения (без ветвлений) быть не может, так как функция
  OP> разрывна, когда угол ACB равен 0. Будем считать, что величина дуги строго
  OP> меньше 360 градусов, то есть разрешать неоднозначность в пользу 0.
 
  OP>     Решение 5 (Serg Belyaev). Комплексно-алгебраическое
  OP> (z=z1*sqrt(z2/z1)).
 
 Я заметил после отправки письма - ниже исправленный
 вариант:
 
  OP>      x2:=Bx-Cx;x1:=Ax-Cx;
  OP>      y2:=By-Cy;y1:=Ay-Cy;
 
           a:=2*(x1*x2+y1*y2)/(x1*x1+y1*y1+x2*x2+y2*y2);
 
  OP>      x:=sqrt((1+a)/2);y:=sqrt((1-a)/2);
  OP>      if (x1*y2-x2*y1)<0 then x:=-x;
  OP>      x2:=x1*x-y1*y+Cx;y2:=x1*y+y1*x+Cy;
 
 Можно сделать очевидные преобразования для подкоренных
 выражений для _x_ и _y_, чтобы там стояли суммы квадратов,
 но, похоже, это уже будет перестраховкой. Я не могу
 представить себе такие тайны округления, что модуль _a_
 стал бы больше 1.  о... в ответственном пакете
 можно было бы записать так
       x:=sqrt(abs(1+a)/2);y:=sqrt(abs(1-a)/2);
 почти без потерь времени.
  Всего доброго,
  <SVB> (Serg Belyaev)
 --- Terminate 5.00/Pro 
  * Origin: (svb@sandy.ru) or (2:5015/166.7)
 
 

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

 Тема:    Автор:    Дата:  
 [* - гео] - середина дуги   Oleg Polubasoff   08 Nov 2001 18:32:50 
 [* - гео] - середина дуги   Serg Belyaev   09 Nov 2001 02:26:37 
 [* - гео] - середина дуги   Oleg Polubasoff   09 Nov 2001 21:04:28 
Архивное /ru.algorithms/3377c78160c4.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional