在给定三个点的情况下创建两个平行平面(Javascript)

在给定三个点的情况下创建两个平行平面(Javascript),javascript,math,3d,raycasting,Javascript,Math,3d,Raycasting,我正在尝试创建一个高级光线投射器。如何编写一个基于3点创建两个的函数?我希望输出是两个数组,对于图像中显示的每个交点,填充{x:0,y:0,z:0}对象。希望这不是很难理解。我想要这样做的原因是,我可以从屏幕上的每个像素进行光线投射。让我们来看看向量c=CB,向量a=AB。你可以得到平面的第二个基本向量,如下所示 d = c X a (cross product) 获取单位基向量 ua = Normalized(a) = a / Length(a) ud = Normalized(d)

我正在尝试创建一个高级光线投射器。如何编写一个基于3点创建两个的函数?我希望输出是两个数组,对于图像中显示的每个交点,填充{x:0,y:0,z:0}对象。希望这不是很难理解。我想要这样做的原因是,我可以从屏幕上的每个像素进行光线投射。

让我们来看看向量c=CB,向量a=AB。你可以得到平面的第二个基本向量,如下所示

d = c X a  (cross product)
获取单位基向量

ua = Normalized(a) = a / Length(a)
ud = Normalized(d) 
并将网格(单元大小为ASize x DSize)点构建为

P[i,j] = B + ua * i * ASize + ud * j * DSize
   for the first plane

Q[i,j] = C + ua * i * ASize + ud * j * DSize
   for the second plane

向量c=CB,向量a=AB,可以得到平面的第二个基向量

d = c X a  (cross product)
获取单位基向量

ua = Normalized(a) = a / Length(a)
ud = Normalized(d) 
并将网格(单元大小为ASize x DSize)点构建为

P[i,j] = B + ua * i * ASize + ud * j * DSize
   for the first plane

Q[i,j] = C + ua * i * ASize + ud * j * DSize
   for the second plane

dotproduct和crossproduct是你的朋友。dotproduct和crossproduct是你的朋友。你能更深入地解释最后一段代码吗?在JavaScript中,P(i,j)是两个循环相互之间的吗?是的,如果我希望输出是一个由{x:0,y:0,z:0}组成的数组,那么带有网格顶点的2d数组可能会填充在两个循环中(
for i...for j...P[i,j]=…
),我应该用什么来代替“B+ua*I*ASize+ud*j*DSize”组件式表达式,如
x=B.x+ua.x*I*ASize+ud.x*j*DSize
,网格的生成顺序是什么?我在网格1中循环,根据(sphere.pos,sphere.radius,this.raycastGrids.grid1[I],this.raycastGrids.grid2[I],intersection)之间是否存在交点,我在var xDraw=I%this.width处绘制了一个黑色圆圈;var yDraw=数学地板(i/this.width);。但它似乎不起作用,它只画了很多不同长度的线。你能更深入地解释最后一段代码吗?在JavaScript中,P(i,j)是两个循环相互之间的吗?是的,如果我希望输出是一个由{x:0,y:0,z:0}组成的数组,那么带有网格顶点的2d数组可能会填充在两个循环中(
for i...for j...P[i,j]=…
),我应该用什么来代替“B+ua*I*ASize+ud*j*DSize”组件式表达式,如
x=B.x+ua.x*I*ASize+ud.x*j*DSize
,网格的生成顺序是什么?我在网格1中循环,根据(sphere.pos,sphere.radius,this.raycastGrids.grid1[I],this.raycastGrids.grid2[I],intersection)之间是否存在交点,我在var xDraw=I%this.width处绘制了一个黑色圆圈;var yDraw=数学地板(i/this.width);。但它似乎不起作用,只是画了很多不同长度的线。