我已经写了asymptote
代码:
\begin{asy}
import geometry;
//import g2geo;
unitsize(1cm);
defaultpen(fontsize(11pt));
pair A=(0.8,4); dot(Label("$A$",align=NW),A);
pair B=(0,0); dot(Label("$B$",align=SW),B);
pair C=(7,0); dot(Label("$C$",align=SE),C);
draw(A--B--C--A);
triangle t=triangle(A,B,C);
draw(circle(A,B,C));
point I=incenter(t); dot(Label("$I$",align=NW),I);
point M=midpoint(t.BC); dot(Label("$M$",align=NW),M);
circle b=incircle(t), c=excircle(t.BC);
draw(b,red); draw(c,red);
hyperbola hypB=hyperbola(M,b.C,b.r/2); draw(hypB,brown);
hyperbola hypC=hyperbola(M,c.C,c.r/2); draw(hypC,orange);
point[] temp=intersectionpoints(hypB,hypC);
//dot(Label("$t_0$",align=SE),temp[0]);
\end{asy}
当我绘制 2 条双曲线(如上所示)并使用函数找到它们的交点时intersectionpoints(hypB,hypC)
,它没有返回任何值。
请帮我修复此代码。
答案1
更新:错误geometry.asy
已修复(原始代码可以运行)。请参阅https://github.com/vectorgraphics/asymptote/commit/2a237885ddc65eb8db7fc9a8d2fa51c17a5b25a1和 https://github.com/vectorgraphics/asymptote/commit/d63f1d90e26cfc27d496daee95858ed03b78692a
欢迎测试和反馈。
原始答案:
首先,似乎 中有一个错误geometry.asy
。对于双曲线交点,例程是首先导出相应的四次方程,然后使用四次复数分解并提取实根。在您的示例中,方程没有退化,显然存在错误:例程不接受两个双曲线的零系数y^2
。
其次,即使双曲线有两个部分,铸造path
也只提取其中一个部分。这就是为什么path hypB=hyperbola(M,b.C,b.r/2)
给出的图像不完整。可以通过添加第二部分hyperbola(b.C,M,b.r/2)
。
请找到一种解决方法(geometry.asy 具体intersectionpoints
应该得到改进)。
import geometry;
//import g2geo;
unitsize(1cm);
defaultpen(fontsize(11pt));
pair A=(0.8,4); dot(Label("$A$",align=NW),A);
pair B=(0,0); dot(Label("$B$",align=SW),B);
pair C=(7,0); dot(Label("$C$",align=SE),C);
draw(A--B--C--A);
triangle t=triangle(A,B,C);
draw(circle(A,B,C));
point I=incenter(t); dot(Label("$I$",align=NW),I);
point M=midpoint(t.BC); dot(Label("$M$",align=NW),M);
circle b=incircle(t), c=excircle(t.BC);
draw(b,red); draw(c,red);
path[] hypB=hyperbola(M,b.C,b.r/2)^^hyperbola(b.C,M,b.r/2);
draw(hypB,brown);
path[] hypC=hyperbola(M,c.C,c.r/2)^^hyperbola(c.C,M,c.r/2);
draw(hypC,orange);
pair[] tp=intersectionpoints(hypB,hypC);
for (int i=0;i<tp.length;++i)
{
dot(Label("$T_"+string(i)+"$",align=SE),tp[i]);
}
结果
答案2
hyperbola
如果用替换,它就可以正常工作path
。请注意,我没有该g2geo
模块。
\documentclass[border=3mm]{standalone}
\usepackage{asypictureB}
\begin{document}
\begin{asypicture}{name=hyperbolae}
import geometry;
//import g2geo;
unitsize(1cm);
defaultpen(fontsize(11pt));
pair A=(0.8,4); dot(Label("$A$",align=NW),A);
pair B=(0,0); dot(Label("$B$",align=SW),B);
pair C=(7,0); dot(Label("$C$",align=SE),C);
draw(A--B--C--A);
triangle t=triangle(A,B,C);
draw(circle(A,B,C));
point I=incenter(t); dot(Label("$I$",align=NW),I);
point M=midpoint(t.BC); dot(Label("$M$",align=NW),M);
circle b=incircle(t), c=excircle(t.BC);
draw(b,red); draw(c,red);
path hypB=hyperbola(M,b.C,b.r/2); draw(hypB,brown);
path hypC=hyperbola(M,c.C,c.r/2); draw(hypC,orange);
pair[] isp=intersectionpoints(hypB,hypC);
dot(Label("$t_0$",align=SE),isp[0]);
dot(Label("$t_1$",align=SW),isp[1]);
\end{asypicture}
\end{document}
答案3
geometry.asy 中的这个错误已在 Asymptote 版本 2.57 中修复。