LINUX.ORG.RU

METAPOST касательня к окружности


0

0

Как можно построить в subj касательную к окружности из точки? Нашёл примеры для кривой, но там изначально указана точка касания, с окружностью - сложнее.

P.S. Гугл не помог,

★★★★

А в лоб нельзя вопрос решить, т.е. найти точку касания и провести прямую, через две точки.

olegk ★★
()
Ответ на: комментарий от olegk

Можно, разумеется. Только координаты точки, я так понимаю, будут иррациональными, значит все достоинства аналитического описания рисунка сходят на нет (например, при сильном увеличении будет видно, что точки не совпадают).

Davidov ★★★★
() автор топика

Не очень понял задачу. Касательную можно в миллионе мест и под миллионом углов. Что именно надо-то? Рандомно точку на окружности и касательную к рандомной точке вне окружности? Ну это формула линии из школьного учебника геометрии.

anonymous
()
Ответ на: комментарий от anonymous

Нужно построить касательную к заданной окружности из заданной точки
(лежащей вне окружности). Таких касательных может быть только две.

Задача сделать это в metapost.

P.S. Если так понятнее, то, например, задан такой код:

beginfig(2);
u=1cm;
%Окружность, её ценр в точке z1
path e;
z1=(1u,1u);
e=fullcircle scaled 2u shifted z1;
draw e;
%точка
z2=(1u,5u);
%а что писать дальше не знаю :)
endfig;

Davidov ★★★★
() автор топика
Ответ на: комментарий от Davidov

С metapost особо не общался, но вообще идея такая - от точки в центр окружности как бы проводится прямая, потом от неё строится касательная а-ля прямоугольный треугольник... Щас жутко хочу спать и лень сочинять нормальную формулу, но в самом тупом случае считаем угол этого радиуса, прибавляем 90 градусов и дальше x=x0+r*cos+r*sin; y=y0+r*sin-r*cos, если не ошибаюсь. Увеличиваем в цикле радиус и нарисуется прямая.

anonymous
()

Получилось. Значит, как я понял, метапост умеет решать только линейные уравнения, следовательно придётся считать самому, это верно. Но, разумеется, с помощью функций metapost.

Идея в том, чтобы определить функцию arcsind в метапосте (неявно, через встроенную функцию angle). А потом просто посчитать. Код приблизительно такой (прошу прощения, торопился):
% Построение касательной к окружности в metapost
beginfig(1);
vardef arcsind primary x = angle((1+-+x,x)) enddef;
numeric u;
u=1mm;
path p;
p:=fullcircle scaled 2u;
z1=(0,10u);
z2=(1u,0);
z3=z1-z2;
z4=z3 rotated arcsind(u/length(z2-z1));
draw z1--z2;
%касательная к окружности
draw z2--z4+z2;
draw p shifted z1;
endfig;

Davidov ★★★★
() автор топика
Ответ на: комментарий от Davidov

Дык ведь METAPOST это переделанный METAFONT. Автор METAPOST'а рекомендует для изучения METAPOST'а читать The METAFONTbook.

Begemoth ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.