这里用的数学知识,求高手科普了
这里 我们定义 P0=(-1,-1,0) P1=(1,-1,0) P2=(1,-1,1) P3=(-1,-1,1) P4=(-1,1,0) P5=(1,1,0) P6=(1,1,1) P7=(-1,1,1) 我们通过这8个点构建6个面,通过3点共面,假设面是Pos0,pos1,pos2构成,u=Pos1-Pos0,v=Pos2-Pos0,那么法向量n=u×v。则d=-(n×Pos0)。得到每个平面的平面公式n,d,从而得到A,B,C,D,(n的xn,yn,zn,d,就是a,b,c,d)。
Near: (P0,P4,P5) n=(0,0,-1),d=0 0x+0y-1z+0=0
Far: (P2,P6,P7) n=(0,0,1),d=-1 0x+0y+1z-1=0
Left: (P0,P3,P7) n=(-1,0,0),d=-1 -1x+0y+0z-1=0
Right: (P1,P5,P6) n=(1,0,0),d=-1 1x+0y+0z-1=0
Top: (P4,P7,P6) n=(0,1,0),d=-1 0x+1y+0z-1=0
Bottom: (P0,P1,P2) n=(0,-1,0),d=-1 0x-1y+0z-1=0
_______________________________________________ 分割线
我随便取个(P0,P1,P2) n=(0,-1,0),d=-1 0x-1y+0z-1=0
我不明白,这个n=(0,-1,0)是怎么计算出来的?
按照他的计算方式。u=Pos1-Pos0,v=Pos2-Pos0
应该是u=p1(1,-1,0)-p0(-1,-1,0) v=p2(1,-1,1)-p0(-1,-1,0)。
n应该等于(2,0,0)×(2,0,1) = (4,0,0)才对啊怎么会变成 n=(0,-1,0)?
求老师们指点
[解决办法]
x 表示差积 http://en.wikipedia.org/wiki/Cross_product,你当 . 积算了 http://en.wikipedia.org/wiki/Dot_product,可不是错吗。
[解决办法]
你最好读读那个 wiki,或者差积相关的资料,就 csdn 这编辑器,什么数学公式也写不了,没法儿在这里解释。
[解决办法]
(2,0,0)×(2,0,1) = (4,0,0)
///////////////////////////
汗,你应该先了解下向量的乘法
[解决办法]
你的减法没错,就是 #4 挑的那句差积算错了,老老实实看书吧,求人不如求己。
[解决办法]
三个点可以确定一个平面,4个点不一定能。d=-1 0x-1y+0z-1=0 就是平面方程
[解决办法]
u = (2,0,0)
v = (2,0,1)
到这一步,楼主算得是对的。但n = u x v这一步就错了。你那样算的是u.v(点乘),而不是uxv(差乘)。
如果你熟悉行列式,差乘的算法很简单,比如以这个计算为例:
i j k
2 0 0
2 0 1
这个行列式的结果等于:
(i*0*1 - 0*0*i) - (2*1*j - 0*2*j) + (2*0*k - 0*2*k)
= (0 - 0)*i - (2 - 0)*j + (0 - 0)*k
= 0*i - 2*j + 0*k
=(0, -2, 0)
归一化处理(就是让最大那个元素的绝对值为1,因为法向量仅关注向量的方向)后就得到
(0, -1, 0)
所以n = (0, -1, 0)
[解决办法]
楼主学过立体几何么?如果没有,这样的题目就不适合你做,等以后上了高中,学过立体几何后再做这样的题目吧。
[解决办法]
我也不知道你为什么需要六个平面,看起来你要用八个顶点构造一个正方体,不过你自己要干嘛应该你最清楚啊。