2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Нахождение центра окружности по 2м точкам и углу
Сообщение07.10.2006, 10:41 
Сколько ни пытаюсь, ничего не выходит :(
Изображение
По известным точкам $A$ и $B$ окружности найти центр окружности $C$, если известно что $\angle BCA = \gamma$.

Кстати, задачу решаю для расчёта примитивов AutoCAD, если есть знатоки LISP, то решение можно выдрать отсюда

 
 
 
 
Сообщение07.10.2006, 11:03 
Аватара пользователя
У Вас $c$ - длина отрезка $AB$? Находим середину отрезка $AB$, через неё проводим перпендикуляр к отрезку $AB$ и откладываем от неё отрезки длиной $\frac{c}{2\tg\frac{\gamma}{2}}$.

 
 
 
 
Сообщение07.10.2006, 11:15 
Someone писал(а):
У Вас $c$ - длина отрезка $AB$?

да
Someone писал(а):
Находим середину отрезка $AB$, через неё проводим перпендикуляр к отрезку $AB$ и откладываем от неё отрезки длиной $\frac{c}{2\tg\frac{\gamma}{2}}$.

Спасибо. А как найти прямую перпендикулярную данному отрезку и проходящую через заданную точку не подскажете? ;)

 
 
 
 Система трёх уравнений:
Сообщение07.10.2006, 11:50 
$\left\{
  \begin{array}{l}
  (x_i-a)^2+(y_i-b)^2=r^2,\quad i=1,2\\
  (x_1-x_2)^2+(y_1-y_2)^2=r^2+r^2-2r^2\cos\gamma
  \end{array} \right.
$
(последнее - теорема косинусов)
Решение:
$r^2=\frac{(x_1-x_2)^2+(y_1-y_2)^2}{4\sin^2(\gamma/2)}$
$a=\frac{1}{2}(x_1+x_2)\pm\frac{1}{2}(y_1-y_2)\ctg(\gamma/2)$
$b=\frac{1}{2}(y_1+y_2)\mp\frac{1}{2}(x_1-x_2)\ctg(\gamma/2)$
(знаки либо верхние, либо нижние).
Проверьте... надеюсь, не ошибся...
Ошибся... Поисправлял в 13:30

 
 
 
 
Сообщение07.10.2006, 12:09 
Аватара пользователя
Это можно проще. Отрезок BA имеет координаты $(x_2-x_1,y_2-y_1)$. Ортогональный ему (такой же длины) имеет вид $(y_2-y_1, x_1-x_2)$. Теперь его нужно умножить на коэффициент $\frac{1}{2\tg (\gamma/2)}$ и отложить из центра отрезка BA, т.е. из точки $(\frac{1}{2}(x_1+x_2),\frac{1}{2}(y_1+y_2))$.

Второе решение получится, если ортогональный отрезок взять с противоположным знаком.

 
 
 
 
Сообщение07.10.2006, 13:15 
Алексей К.
$a$ и $b$ это координаты центра как я понял, проверяю сейчас, пока не сходится :), наверное я ошибся где-то, спасибо

PAV
спасибо, буду думать

 
 
 
 
Сообщение07.10.2006, 13:20 
Да, это коррдинаты центра. Вы, возможно, ошиблись, не учтя соответствие знаков:
в одной формуле $\pm$, в другой $\mp$. Для одного решения надо брать верхние знаки
(+ и -), для второго --- нижние (- и +).

 
 
 
 
Сообщение07.10.2006, 15:01 
Алексей К.
верхнее уравнение неправильно записано, это на решении не моголо отразиться?
насколько я понимаю, должно быть
$(x_i-a)^2+(y_i-b)^2=r^2,\quad i=1,2 $

 
 
 
 Да, конечно!
Сообщение07.10.2006, 23:21 
Да, конечно, sorry... Поправил там.
На решени не отразилось: явное нарушение размерностей $(y^1-b^2)$ сказалось бы и в решении. Решение совпадает с другими предложенными.
Всё получилось?

Добавлено спустя 51 минуту 52 секунды:

Совесть заговорила...

Столько наошибался, что пришлось запрограмировать для проверки... Если нижеследующие строки, начиная с %PS, скопировать в файл (test.ps), то любой PostScript viewer (GSview)
Вам покажет картинку . Защита от плохих данных не предусмотрена --- всё на скорую руку... Данные (x1,y1,x2,y2,gamma) можно менять редактором...

%!PS
/x1 100 def /y1 77 def
/x2 -30 def /y2 48 def
/gamma 90 def
/ctg gamma 2 div dup cos exch sin div def
/r x1 x2 sub dup mul y1 y2 sub dup mul add sqrt 2 div gamma 2 div sin abs div def
/Ishow {% (r1) Ishow : Prints second character as index
dup gsave currentpoint translate newpath 0 0 moveto
dup stringwidth add exch
{pop pop 0.6 0.6 scale 0 exch -0.2 mul rmoveto} exch kshow
grestore stringwidth rmoveto
} bind def
/Point {%
gsave newpath 1 0 0 setrgbcolor moveto 1 setlinecap 4 setlinewidth 0 0 rlineto stroke grestore
} def

/sign 1 def
250 300 translate /Times-Roman findfont 16 scalefont setfont
-120 0 moveto 120 0 lineto 0 -100 moveto 0 100 lineto stroke
-100 0 Point -110 -20 moveto (-100) show
100 0 Point 90 -20 moveto (100) show

x1 y1 2 copy Point moveto -16 -16 rmoveto (x1) Ishow (,) show (y1) Ishow
x2 y2 2 copy Point moveto -16 -16 rmoveto (x2) Ishow (,) show (y2) Ishow

2 {%
/a x1 x2 add y1 y2 sub ctg mul sign mul add 2 div def
/b y1 y2 add x2 x1 sub ctg mul sign mul add 2 div def
gsave .4 setlinewidth 0 0 1 setrgbcolor x1 y1 moveto a b lineto x2 y2 lineto stroke grestore
a b Point a b 20 sub moveto (a,b) show
newpath a b r 0 360 arc stroke
/sign -1 def
} repeat
showpage
%----------------------------------------------------------------------------------------

 
 
 
 
Сообщение08.10.2006, 06:22 
Алексей К.
огромное спасибо

 
 
 [ Сообщений: 10 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group