根据规则查找向量的长度

时间:2015-09-21 10:59:10

标签: java math vector trigonometry

我正在为具有给定点的网格创建顶点数组。到目前为止,我能够创建一个具有厚度的连续网格。但是,在两个线段的交叉处存在问题,这些线段之间的向量尺寸需要根据具体情况而变大或变小,以便持续观察。

我现在拥有的内容:

What I have now

对于给定的角度θ1和θ2,我如何计算红色矢量的长度?

我想要的是什么: What I want

我如何构建网格 How I structured my mesh

1 个答案:

答案 0 :(得分:1)

你可能会让它变得比它需要的更复杂。

让我们从计算红色箭头开始。对于任何线段(p_i, p_j),我们可以使用:

计算线段的法线
dir = normalize(p_j - p_i)
normal = (-dir.y, dir.x)  //negate if you want the other direction

在两个段之间的连接点,我们可以平均(并重新标准化)事件法线。这给了我们红色箭头。

剩下的唯一问题是你需要转移多少。给定顶点o_l的偏移量的线段o_v的结果偏移量为:

o_l = o_v * dot(normal_l, normal_v)

这意味着以下内容:两个法线都是单位向量。因此,他们的点积最多只有一个。两个线段平行时就是这种情况。然后,顶点的整个偏移量被传递到线。角度越小,转移的偏移越小。例如。如果两个连续线段之间的角度为120°,则法线的点积为0.5。如果将顶点沿法线移动1个单位,则两个线段的厚度均为0.5。

因此,为了产生特定的线条粗细(o_l),我们需要将顶点移动o_v

o_v = o_l / dot(normal_l, normal_v)

对顶点法线的线段平均值求平均的构造确保dot(normal_l1, normal_ v) = dot(normal_l2, normal_v),即在任何情况下两条线的结果线厚度相等。