我正在尝试将一条线转换为一个非常细的多边形,但不知道如何考虑线的斜率/角度。
假设我有 x1,y1 和 x2,y2 的线段。如果这些值是 0,0 和 100,0(完全平坦的直线),我可以通过在两个 y 点上简单地添加 0.00001 来创建 2 个新点来创建一个非常薄的多边形。
我如何考虑线的斜率以实现与任何方向的线相同的效果?
谢谢。
我正在尝试将一条线转换为一个非常细的多边形,但不知道如何考虑线的斜率/角度。
假设我有 x1,y1 和 x2,y2 的线段。如果这些值是 0,0 和 100,0(完全平坦的直线),我可以通过在两个 y 点上简单地添加 0.00001 来创建 2 个新点来创建一个非常薄的多边形。
我如何考虑线的斜率以实现与任何方向的线相同的效果?
谢谢。
您可以使用与 z 轴(即三维)的叉积来确定与您的线成直角的线的方向。
(dx,dy,0) cross (0,0,1)
事实证明,这些条款取消了,你得到的是(免责声明:我的标志可能是错误的):
(-dy,dx,0)
然后是规范化该方向(与您的线的长度相同)并乘以线宽的一半的情况。然后,您将线端偏移到您刚刚计算的方向(正数和负数版本)。
您需要根据线的方向进入哪个象限来计算手性,以便以正确的顺序(顺时针或逆时针)生成点。
找到一条垂直线,然后在这个方向上得到两个点,你将始终拥有相同的厚度。
向量 (x, y) 的两条垂线是 (-y, x) 和 (y, -x) 所以:
因为你的向量是 (x2 - x1, y2 - y1) 一个垂直于它的向量可能是:
(y1 - y2, x2 - x1) 或 (y2 - y1, x1 - x2)
只需选择一个,然后将其添加到每个点即可获得相应的点。假设您选择了第一个,您的两个额外点将是:
(x1 + d(y1 - y2), y1 + d(x2 - x1)) and (x2 + d(y1 - y2), y2 + d(x2 - x1))
其中 d 是您的线条粗细。
假设 delta = 0.001
然后,您正在寻找的多边形是:
(x1, y1)
(x1 + 0.001 * (y2 - y1), y1 - 0.001 * (x2 - x1))
(x2 + 0.001 * (y2 - y1), y2 - 0.001 * (x2 - x1))
(x2, y2)