我在Euclidean平面上有一条 L 线和一个标量 D ,我想找到 与 L 平行的2条线与 L 的距离 D 。 我怎么能在CGAL中做到这一点? api CGAL :: parallel 用于比较两条线/线段/光线 并行,不是为了返回平行线。 api Line_2<内核> 垂直(const Point_2< Kernel>& p)const 可用于获取 线 N 的方程式 L ,但我似乎无法找到 在正常的 N 上从 L 获取距离 D 的方法。 (如果我能 得到这样一个点 P ,我可以生成与 L 传递并行的行 通过 P 得到我想要的线方程式。)
思考?我确信有一种方法可以使用其他API,但我似乎无法做到 找到它(我通过2D和3D线性几何看起来非常彻底 内核API列表,并检查了名称听起来很有希望的API。
答案 0 :(得分:2)
你can get a,b,c一般线方程的参数
a * x + b * y + c = 0
然后将其除以
进行标准化d = Sqrt(a * a + b * b)
获得
A * x + B * y + C = 0, where
A = a / d
B = b / d
C = c / d
制作参数为(A, B, C + D)
和(A, B, C - D)
的平行线方程式(其中D为距离)
如果将Line_2.direction规范化,则使用其他方法会更简单:
dir = L.direction
p = L.point
p1 = Point(p.x + dir.y * D, p.y - dir.x * D)
p2 = Point(p.x - dir.y * D, p.y + dir.x * D)
L1 = Line_2(p1, dir)
L2 = Line_2(p2, dir)