边交叉控制

时间:2017-08-20 08:42:53

标签: c# unity3d voronoi

我试图实现voronoi图生成。

目前它的工作方式如下: 当站点事件发生时,我们找到x = const和一些parabol之间的交叉点。从这一点开始,我们将通过parabols焦点和当前站点之间的平分线画出。该线最初由2条射线组成。两者都从交叉点开始,一个向左,另一个向右。另外,对于二等分留置,我知道了y = f * x + g的f和g。

在圆形事件(获取连接2条边的顶点)期间,我需要找到2条边的交点。如果中点(2条光线的起点)位于2个边缘交点之间,则以下代码可以正常工作。但在我看来,经常发生中点超出其中一个交叉点,然后交叉点不会发生。

有人能找到代码的问题吗?我按照说明(阅读C ++代码:http://blog.ivank.net/fortunes-algorithm-and-implementation.html),其中sweepline从上到下移动,(0,0)在左上角。我的扫描线从上到下移动,(0,0)在左下方。所以有些数学是关闭的。

完整代码:https://codeshare.io/GLWRQb

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);
    }

编辑:

经过一些试验和错误,我发现问题不是交叉检查。但在某些情况下,会发生错误边缘的比较。

0 个答案:

没有答案