C# 获取多边形内的点x距离

C# 获取多边形内的点x距离,c#,unity3d,vector,C#,Unity3d,Vector,我想不出一个办法。我有一个向量2点的列表,我需要所有的点,这些点在这个多边形内,有一个x距离 所以我有一个绿点列表,并寻找一个与相应绿点有x距离的红色点列表 我想得到2个假想点,1个统一点指向上一个和下一个点。 然后向这2个点的中心移动x距离。但是,如果内部角度不是90,则它将移动到多边形之外 Vector2 me = point; // point Vector2 next = n_point; // on left Vector2 previous = p_point; // on righ

我想不出一个办法。我有一个向量2点的列表,我需要所有的点,这些点在这个多边形内,有一个x距离

所以我有一个绿点列表,并寻找一个与相应绿点有x距离的红色点列表

我想得到2个假想点,1个统一点指向上一个和下一个点。 然后向这2个点的中心移动x距离。但是,如果内部角度不是90,则它将移动到多边形之外

Vector2 me = point; // point
Vector2 next = n_point; // on left
Vector2 previous = p_point; // on right
//Debug.DrawLine(me, (me - next), Color.green);
// 2 points ep1 & ep2 
Vector2 center = Vector2.Lerp(ep1,ep2, 0.5f); 
Vector2 finalpoint = Vector2.Lerp(me,center,0.1f); //move towards center

我觉得我想得太多了。有没有一种超简单的方法来做这个?

假设所有边都是水平的或垂直的,我只需简单地考虑每一种可能的情况。

获取方向向量

Vector2 from = me - previous;
Vector2 to = next - me;
我还假设总有一个转折点。也就是说,如果from是水平的,那么to是垂直的,反之亦然。x或y为0.0f,另一个坐标不为零。 我还假设x轴指向右侧,y轴向上。 假设点按时钟顺序列出

float x, y;
if (from.x > 0.0f) { // from points to the right
    y = me.y - distance;
    if (to.y > 0.0f) x = me.x + distance else x = me.x - distance;
} else if (from.x < 0.0f) { // from points to the left
    y = me.y + distance;
    if (to.y > 0.0f) x = me.x + distance else x = me.x - distance;
} else if (from.y > 0.0f) { // from points upwards
    x = me.x + distance;
    if (to.x > 0.0f) y = me.y - distance else y = me.y + distance;
} else { // from.y < 0.0f, points downwards
    x = me.x - distance;
    if (to.x > 0.0f) y = me.y - distance else y = me.y + distance;
}
Vector2 me_inner = new Vector2(x, y);

我希望我所有的迹象都是对的。

有两种方法浮现在我的脑海中

备选案文1:

为每条线定义一条法线,即指向外部的垂直线 将每个顶点的法线定义为该顶点所属直线法线的平均值。 沿法线移动顶点X单位。 这相当容易实现,但对于某些类型的几何图形,可能存在自相交问题

备选案文2:

为每条线定义一条法线,即指向外部的垂直线 沿法线移动每个线段X个单位。 对于每对连续的线段,确定是否: 两条线段相交,如果相交,则使用交点作为顶点。i、 e.将交点添加到点列表中。 如果它们不相交,请在直线的起点和终点之间插入新线段。i、 e.在点列表中插入起点和终点顶点。
这应该可以更好地处理自相交,但可能仍然存在问题。而且实现起来有点麻烦。这在某种程度上取决于您需要新线定位的精确程度,以及它应该处理不同类型的几何体。

请参见。它是一个多边形使它更容易,但不是“超级容易”画一个圆心是红点,半径是距离的圆。然后找到圆内的绿色点。90度并不重要。d=sqrtx2+y2。这些点是按时钟顺序排列的还是按计数器时钟顺序排列的?这是可行的,因为所有的假设都是正确的。非常感谢。