Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
绘制两条相互相交的直线,并需要使用directx在c#中找到相交点?_C#_Directx - Fatal编程技术网

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

绘制两条相互相交的直线,并需要使用directx在c#中找到相交点?,c#,directx,C#,Directx,绘制两条相互相交的直线,并需要使用directx在c#中找到相交点。目前我对direct3d不太记得了;这个网站应该让你开始: 就相交线而言,下面的函数应该计算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;

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

目前我对direct3d不太记得了;这个网站应该让你开始:

就相交线而言,下面的函数应该计算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;
}
静态点线相交(点a1、点a2、点b1、点b2)
{
浮点数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;
如果(da*dy-db*dx==0){
//这些部分是平行的。
返回点。空;
}
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);

如果((s>=0)和(s=0)和(t我现在对direct3d不太记得了;这个网站应该让你开始:

就相交线而言,下面的函数应该计算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;
}
静态点线相交(点a1、点a2、点b1、点b2)
{
浮点数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;
如果(da*dy-db*dx==0){
//这些部分是平行的。
返回点。空;
}
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);

如果((s>=0)&(s=0)&(t)你可能会使用数学来找到交点-你必须对如何画线有点具体。你可能会使用数学来找到交点-你必须对如何画线有点具体。这里有一个微妙的错误:if(da*dy-db*dx==0)然后这些线可以重合,具体来说,它们可以(1)在一个点上接触,(2)重叠,在这种情况下,交点实际上是一个线段,而不是一个点,或者(3)它们可能根本不重叠(返回点。空)。特别是:这是一个很好的观点,最好在代码前面加一条注释,解释直线重合时它是如何工作的。我可以想到很多情况,我更愿意将重叠线段视为不相交,但在这种情况下肯定需要将其指定为函数的输出。希望如此它从方法的签名中清楚到它不能返回一个线段,因此不考虑重叠的线相交,这里有一个微妙的错误:如果(D*Dy-Db*dx=0),那么线可能是重合的,特别是,它们可以(1)在一个点上接触,(2)。重叠在这种情况下,交点实际上是一条线段,而不是一个点或(3)它们可能根本不重叠(返回点.空)。特别是:这是一个很好的观点,最好在代码前面加一条注释,解释直线重合时它是如何工作的。我可以想到很多情况,我更愿意将重叠线段视为不相交,但在这种情况下肯定需要将其指定为函数的输出。希望如此它从方法的签名中清楚到它不能返回一个线段,因此不考虑交迭线的相交。