Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
C# Rect3D/平面的3D直线/矢量交点_C#_Wpf_Math_Vector_3d - Fatal编程技术网

C# Rect3D/平面的3D直线/矢量交点

C# Rect3D/平面的3D直线/矢量交点,c#,wpf,math,vector,3d,C#,Wpf,Math,Vector,3d,我在Rect3D边界框中有一个Point3D和方向Vector3D。我想扩展点单位,它“点击”了Rect3D,然后得到将向量扩展50的点。有人能帮我找到计算这个的方法吗 比如: public Point3D CalculatePoint(Point3D innerPoint, Rect3D rect, double extendOutside) 如果给您一个长方体,并根据其8个顶点a-H定义它,其6个面定义如下: ABC ADE FBC FGH DGH ABE 以及由方向向量和点(x0,y0

我在
Rect3D
边界框中有一个
Point3D
和方向
Vector3D
。我想扩展点单位,它“点击”了
Rect3D
,然后得到将向量扩展50的点。有人能帮我找到计算这个的方法吗

比如:

public Point3D CalculatePoint(Point3D innerPoint, Rect3D rect, double extendOutside)

如果给您一个长方体,并根据其8个顶点a-H定义它,其6个面定义如下:

ABC
ADE
FBC
FGH
DGH
ABE
以及由方向向量
和点
(x0,y0,z0)
你可以通过每一个,得到两个不同的点,在这条线的相交处。给定一个点,方向向量和盒子的3个顶点

//p0是线上的点
//方向是直线的方向向量
//A、 B,C是平面上的点
向量3 lpIntersect(向量3 p0,向量3方向,向量3 A,向量3 B,向量3 C){
向量3n=(B-C).交叉(C-A);
向量3 num=(p0-A)*n;
向量3 denom=方向*n;
如果((num.x==0&&num.y==0&&num.z==0)||
(denom.x==0&&denom.y==0&&denom.z==0))
返回向量3(0,0,0);
返回num/denom;
}
一旦有了这两个点,就称它们为
(Ax,Ay,Az)
(Bx,By,Bz)
,并为类似直线的

x = x0 + vx*t
y = y0 + vy*t
z = z0 + vz*t
您可以通过插入上述点并求解
t
以获得例如
(x-x0)/vx
来检查哪个点朝您给定的方向移动,如果
t>=0
,则该点朝您给定的方向移动,否则为另一点:

if((Ax-x0)/vx)>=0){
x=Ax+vx*50;
y=Ay+vy*50;
z=Az+vz*50;
}
否则{
x=Bx+vx*50;
y=乘以+vy*50;
z=Bz+vz*50;
}

您可以向任何方向延伸您的点,您的问题的答案将是一个曲面(而不是一个点)。否则,应该指定扩展的向量(方向)。最好在课堂上问这样的问题,因为它们与C#和WPF无关。我在这里问是因为我无法将这些数学知识转化为C#代码或C#方法。这就是为什么我在这里问你。你在说什么数学知识?你还没有清楚地说明问题。数学知识如何计算矩形外的“蓝色”点。您还不清楚什么?正如@shfire所指出的,在定义光线方向或提供其他信息之前,蓝点的数量是无限的