绘制两条相互交叉的线,需要使用directx在c#中找到交点?

时间:2010-01-18 04:43:23

标签: c# directx

绘制两条相互交叉的线,需要使用directx?

在c#中找到交点

1 个答案:

答案 0 :(得分:3)

我现在记不起direct3d了;这个网站应该让你开始:http://www.drunkenhyena.com/cgi-bin/view_net_article.pl?chapter=2;article=21

就交叉线而言,下面的函数应该计算a)两条线是​​否相交,如果是,那么约为。

static Point lineIntersect(Point a1, Point a2, Point b1, Point b2)
{
    float dx, dy, da, db, t, s;

    dx = a2.X - a1.X;
    dy = a2.Y - a1.Y;
    da = b2.X - b1.X;
    db = b2.Y - b1.Y;

    if (da * dy - db * dx == 0) {
        // The segments are parallel.
        return Point.Empty;
    }

    s = (dx * (b1.Y - a1.Y) + dy * (a1.X - b1.X)) / (da * dy - db * dx);
    t = (da * (a1.Y - b1.Y) + db * (b1.X - a1.X)) / (db * dx - da * dy);

    if ((s >= 0) & (s <= 1) & (t >= 0) & (t <= 1)) 
        return new Point((int)(a1.X + t * dx), (int)(a1.Y + t * dy));
    else
        return Point.Empty;
}

你没有指定你的线是否表示为坐标(每条线2个坐标)或者它是否是一个等式,所以我假设你有2个点。

另外,我假设线条不是无限长,因此它们可能不相交,因为它们是平行的,或者根本不足以相交。

最后,这些只适用于2d行,如果你想要3d中的等价物,你需要询问相交的平面