|
Geogebra / Polar Command
geometry.asy中的tangents函数可以画切线
import geometry; size(7.5cm,0);
point A=(2.5,-1); dot(A);
ellipse C=ellipse(A,3,1); draw(C,linewidth(bp));
path Cp=shift(A)*xscale(2)*scale(3)*unitcircle;
point M=relpoint(Cp, 45/360); dot(M);
draw(tangents(C, M), 0.8*red);
addMargins(10mm,10mm);
改造为polar函数,画圆锥曲线外的点的极线
import geometry; size(7.5cm,0);
line polar(ellipse el, point M)
{
point Mp = samecoordsys(M, el.F2) ?
M : changecoordsys(el.F2.coordsys, M);
circle c = circle(Mp, abs(el.F1 - Mp));
circle cc = circle(el.F2, 2 * el.a);
point[] inter = intersectionpoints(c, cc);
line tl0 = line(inter[0], el.F2, false);
line tl1 = line(inter[1], el.F2, false);
return line(intersectionpoints(tl0, el)[0],intersectionpoints(tl1, el)[0]);
}
point A=(2.5,-1); dot(A);
ellipse C=ellipse(A,3,1); draw(C,linewidth(bp));
path Cp=shift(A)*xscale(2)*scale(3)*unitcircle;
point M=relpoint(Cp, 45/360); dot(M);
draw(polar(C, M), 0.8*red);
addMargins(10mm,10mm);
用polar和diameter相交得反演点
import geometry; size(7.5cm,0);
point inverse(ellipse el, point M)
{
point Mp = samecoordsys(M, el.F2) ?
M : changecoordsys(el.F2.coordsys, M);
circle c = circle(Mp, abs(el.F1 - Mp));
circle cc = circle(el.F2, 2 * el.a);
point[] inter = intersectionpoints(c, cc);
line tl0 = line(inter[0], el.F2, false);
line tl1 = line(inter[1], el.F2, false);
return intersectionpoint(line(Mp,el.C),line(intersectionpoints(tl0, el)[0],intersectionpoints(tl1, el)[0]));
}
point A=(2.5,-1); dot(A);
ellipse C=ellipse(A,3,1); draw(C,linewidth(bp));
path Cp=shift(A)*xscale(2)*scale(3)*unitcircle;
point M=relpoint(Cp, 45/360); dot(M);
dot(inverse(C, M), 0.8*red);
addMargins(10mm,10mm); |
|