如何检查点是否在线上、点在圆内(渐近线)?

如何检查点是否在线上、点在圆内(渐近线)?

在 Asymptote 中,如何检查某个点是否位于公差范围内的线上?

另外,我如何检查一个点是否在圆内?

答案1

geometry下面的代码演示了使用中的包来解决您的两个问题的方法asymptote

import geometry;
unitsize(1inch);

point p1 = (0.0,0.0);
point p2 = (1.0,1.0);

path c = circle((0,0), 1);
write(inside(c, (pair) p1));
write(inside(c, (pair) p2));

line l = line(p1, (1,-1));
write(distance(p1, l));
write(distance(p2, l));

bool pointOnLine(line l, point p, real tolerance=1e-8) {
    return distance(p, l) < tolerance;
}

write(pointOnLine(l, p2));
write(pointOnLine(l, p2, 2.0));

draw(c);
dot(Label("p1 (0,0)"), p1, red);
dot(Label("p2 (1,1)"), p2, red);
draw(l, blue);

这6条命令的输出write();如下。

true
false
0
1.41421356237309
false
true

笔记:

  1. 函数是循环和的inside内置命令。必须将 A 转换为 a才能使用此函数,如下所示。pathpairpointpair

  2. 我创建了一个函数来测试某个点是否在线上。它结合了 函数distance。可以给出公差。如果没有给出,公差默认为1e-8。在这个函数的第二个演示中,我给出了一个较大的公差2.0

在此处输入图片描述

相关内容