C# 边缘相交控制

C# 边缘相交控制,c#,unity3d,voronoi,C#,Unity3d,Voronoi,我正在尝试实现voronoi图生成 目前其工作原理如下: 当现场事件发生时,我们在x=const和某个抛物线之间找到一个交点。从这一点上,我们将通过抛物线焦点和当前站点之间的平分线绘制。这条线最初由两条射线组成。两者都从交点开始,一个向左,另一个向右。此外,对于二分法留置权,我有从y=f*x+g知道f和g的公式 在圆事件期间(获取连接两条边的顶点),我需要找到两条边的交点。如果中点(两条光线的起点)位于两条边交点之间,则以下代码可以正常工作。但在我看来,通常情况下,中点超过一个交点,然后交点就不

我正在尝试实现voronoi图生成

目前其工作原理如下: 当现场事件发生时,我们在x=const和某个抛物线之间找到一个交点。从这一点上,我们将通过抛物线焦点和当前站点之间的平分线绘制。这条线最初由两条射线组成。两者都从交点开始,一个向左,另一个向右。此外,对于二分法留置权,我有从y=f*x+g知道f和g的公式

在圆事件期间(获取连接两条边的顶点),我需要找到两条边的交点。如果中点(两条光线的起点)位于两条边交点之间,则以下代码可以正常工作。但在我看来,通常情况下,中点超过一个交点,然后交点就不发生了

有人能找到代码的问题吗?我遵循了一个指令(读取C++代码:),其中SypLin从上到下移动,(0,0)是左上角。我的扫掠线从上到下移动,(0,0)位于左下角。所以某个地方的数学不对劲了

完整代码:

公共矢量3光线交叉点(VoronoiEdge a、VoronoiEdge b)
{
浮动x=(b.g-a.g)/(a.f-b.f);
浮动y=a.f*x+a.g;
if((x-a.start.x)*a.dx<0)返回向量3.0;
if((y-a.start.y)*a.dy<0)返回向量3.0;
if((x-b.start.x)*b.dx<0)返回向量3.0;
if((y-b.start.y)*b.dy<0)返回向量3.0;
返回新矢量3(x,y);
}
编辑:

经过反复试验,我发现问题不在于交叉口检查。但在某些情况下,会比较错误的边

public Vector3 RayIntersection(VoronoiEdge a, VoronoiEdge b)
    {
        float x = (b.g - a.g) / (a.f - b.f);
        float y = a.f * x + a.g;

        if ((x - a.start.x) * a.dx < 0) return Vector3.zero;
        if ((y - a.start.y) * a.dy < 0) return Vector3.zero;
        if ((x - b.start.x) * b.dx < 0) return Vector3.zero;
        if ((y - b.start.y) * b.dy < 0) return Vector3.zero;

        return new Vector3(x,y);
    }