在旋转后,查找线/点左侧的哪一点

我目前正试图在团结中编写一个着色器,如果两个国家不属于同一个玩家(视觉辅助以查看您的边界),则在风险游戏中围绕各国绘制三角形图案。

现在,我遇到了使着色器正确设置国家的问题。

它始终将国家0设置为左侧,将国家1设置为右侧 – 国家0和1以编程方式设置。

线条边界可以在0到359度之间。

我如何找到0和1国家是我在线的中点左右两点画一个点,一个.01f,一个.1f和一个1f远离每个方向的中点,然后围绕中点旋转它们适当的位置。

之后,我做了一个奇怪的检查,看看这些点是在每个国家的内部还是外部,并比较重量结果(最接近得到3分,中间得到2,最远得到1,以防万一有人建立一个真正搞砸了面向另一个国家的国家)。

在我的测试图中,接近等切的八边形,边框正确显示(在我将角度超过90且小于或等于180的情况下颠倒了国家0和1的位置之后)。 工作没有缺陷,但在其他地图中它不能很好地工作。

除了国家分配之外的所有东西都运作良好,所以我很好奇是否有人知道更好的方法来找出哪个点是左边还是一个细线,或者更好的概念方法来处理这个问题。

在此处输入图像描述

上面的情况基本上就是在我做的时候,红色是左边是蓝色,然后我只是检查3个不同的点,然后权衡左边和权利发现偶数/ odding它到适当的国家(一个在+/-。 01,另一个在+/- .1和第三个1,在偶数/奇数舍入问题的情况下接近)。

然后,如果我发现国家A在右边,我会翻转它们,因为它是根据我绘制的角度在左边。 (我的着色器在第一个和第二个左边渲染,因此为什么我这样做)。

  1. 哪条路左/右在一条线上?

    从上次编辑来看,这不是你的情况。 为什么不使用dot产品?

    线x轴点

    因此,如果线在-x方向上,则结果为负,如果在+x方向,则结果为正。 如果结果为零,则意味着该线仅上升或下降,或者它突出一个点。 如果您需要特定方向而不是左/右,则使用适当a向量而不是x轴。

    • dot(a,b)=ax*b.x+ay*by 2D
    • 3D中的dot(a,b)=ax*b.x+ay*b.y+az*bz

    图像与矢量单位大小的情况相关,在这种情况下,点的结果是b垂直投影到像图像一样

  2. 哪一方有点意义?

    我想这就是你需要的。

    线的一面

    正如您所看到的那样,如果您处理线(P0,P1)和点P您想要归类为三角形,那么它的多边形绕组也会确定线的边。 因此对于隐式轴方向:

    • CW (顺时针)多边形缠绕意味着线的右侧
    • CCW (逆时针)多边形绕组表示线的左侧

    如何缠绕? …简单地计算法向量并获得其Z坐标。 其极性(符号)决定绕组( CW / CCW或其他方式取决于坐标系)。

    • 法线向量计算为三角形的两个顶点(P1-P0)x(P-P1)叉积

    无需仅计算z其他z

    • normal.z = ((P1.x-P0.x)*(Py-P1.y)) - ((P1.y-P0.y)*(Px-P1.x))

    现在只做if (normal.z<0) ... else ...它永远不应该为零,除非你把它称为线上的点或线是一个点...看这里类似的问题: 确定旋转方向/朝向/圆上的可变点