这里用的数学知识,求高手科普了

kuailewending 2013-04-24 12:27:35
这里 我们定义 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)?

求老师们指点
...全文
163 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ri_aje 2013-04-25
  • 打赏
  • 举报
回复
引用 10 楼 kuailewending 的回复:
引用 8 楼 ri_aje 的回复:你的减法没错,就是 #4 挑的那句差积算错了,老老实实看书吧,求人不如求己。 谢谢哥了,我看了叉积相关的知识了。但是对这里的六个面还是有点不太明白。 直接取p0,p1,p2,p3四个点组成一个四边形不就好了么,搞那么多的运算干嘛呢。。
我也不知道你为什么需要六个平面,看起来你要用八个顶点构造一个正方体,不过你自己要干嘛应该你最清楚啊。
kuailewending 2013-04-24
  • 打赏
  • 举报
回复
ri_aje 哥,能全面的解释一下这个运算吗?
ri_aje 2013-04-24
  • 打赏
  • 举报
回复
x 表示差积 http://en.wikipedia.org/wiki/Cross_product,你当 . 积算了 http://en.wikipedia.org/wiki/Dot_product,可不是错吗。
pathuang68 2013-04-24
  • 打赏
  • 举报
回复
引用 10 楼 kuailewending 的回复:
引用 8 楼 ri_aje 的回复:你的减法没错,就是 #4 挑的那句差积算错了,老老实实看书吧,求人不如求己。 谢谢哥了,我看了叉积相关的知识了。但是对这里的六个面还是有点不太明白。 直接取p0,p1,p2,p3四个点组成一个四边形不就好了么,搞那么多的运算干嘛呢。。
楼主学过立体几何么?如果没有,这样的题目就不适合你做,等以后上了高中,学过立体几何后再做这样的题目吧。
pathuang68 2013-04-24
  • 打赏
  • 举报
回复
引用 楼主 kuailewending 的回复:
这里 我们定义 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……
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)
sniffer12345 2013-04-24
  • 打赏
  • 举报
回复
引用 10 楼 kuailewending 的回复:
引用 8 楼 ri_aje 的回复:你的减法没错,就是 #4 挑的那句差积算错了,老老实实看书吧,求人不如求己。 谢谢哥了,我看了叉积相关的知识了。但是对这里的六个面还是有点不太明白。 直接取p0,p1,p2,p3四个点组成一个四边形不就好了么,搞那么多的运算干嘛呢。。
三个点可以确定一个平面,4个点不一定能。d=-1 0x-1y+0z-1=0 就是平面方程
kuailewending 2013-04-24
  • 打赏
  • 举报
回复
引用 8 楼 ri_aje 的回复:
你的减法没错,就是 #4 挑的那句差积算错了,老老实实看书吧,求人不如求己。
谢谢哥了,我看了叉积相关的知识了。但是对这里的六个面还是有点不太明白。 直接取p0,p1,p2,p3四个点组成一个四边形不就好了么,搞那么多的运算干嘛呢。。
kuailewending 2013-04-24
  • 打赏
  • 举报
回复
引用 8 楼 ri_aje 的回复:
你的减法没错,就是 #4 挑的那句差积算错了,老老实实看书吧,求人不如求己。
结贴前最后问一下这里的d是表示什么的?d=-1 0x-1y+0z-1=0 这个方程式表示什么? 最后这里的6个平面是不是四边形?
ri_aje 2013-04-24
  • 打赏
  • 举报
回复
你的减法没错,就是 #4 挑的那句差积算错了,老老实实看书吧,求人不如求己。
kuailewending 2013-04-24
  • 打赏
  • 举报
回复
嗯这里的减法也错了。。。
kuailewending 2013-04-24
  • 打赏
  • 举报
回复
ri_aje哥,那这里的u=p1(1,-1,0)-p0(-1,-1,0) v=p2(1,-1,1)-p0(-1,-1,0)这个减法有错么?
kuailewending 2013-04-24
  • 打赏
  • 举报
回复
ri_aje哥,求关注,留个联系方式把
sniffer12345 2013-04-24
  • 打赏
  • 举报
回复
(2,0,0)×(2,0,1) = (4,0,0) /////////////////////////// 汗,你应该先了解下向量的乘法
ri_aje 2013-04-24
  • 打赏
  • 举报
回复
你最好读读那个 wiki,或者差积相关的资料,就 csdn 这编辑器,什么数学公式也写不了,没法儿在这里解释。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧