背景: #EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  
阅读新闻

判断一个点是否落在一个六面体内

[日期:2007-02-09] 作者:未知 [字体: ]
☆──────────────────────────────────────☆
    splutter (呆子) Fri Jun  8 11:26:32 2001 提到:

        判断一个点是否在一个多边形内可以用计算面积的方法

        不知道这个问题是否可以用计算体积的方法做呢?

                                                - splutter -



☆──────────────────────────────────────☆
    shirmin (珉) Fri Jun  8 11:42:29 2001 提到:

整个程序很短

首先写一个函数double vv(p1,p2,p3,p4)
用来计算p1,p2,p3,p4 4个点的以下行列式值
|x1,y1,z1,1|
|x2,y2,z2,1|
|x3,y3,z3,1|
|x4,y4,z4,1|
这个函数的作用可以判断4点是否共面,还可以判断两点是否在一个面的同侧

然后
for(p1)
for(p2)
  for(p3)
   for(p4)
4重循环取出4个点if (4个点都不相同&&vv(p1,p2,p3,p4)==0)
vv==0说明体积为0,即4点共面.
{
然后for(p5)
保证p5和p1,p2,p3,p4不同而且所有的vv(p1,p2,p3,p5)同号(都>0或都<0),
否则continue;
就是保证除了这四点其他所有点在一侧,
这样保证p1,p2,p3,p4确实是六面体的一个面.
{
  然后保证vv(p1,p2,p3,px)也和这些点同号,(px为要求的点).
  否则就在外面return 0;
  (若此vv==0说明所求点在面上,按照体内的不同定义return 0或者1)
}
}
最后如果对于所有的六面体的面与其他点都同号,侧在六面体内.
return 1;



☆──────────────────────────────────────☆
    shirmin (珉) Fri Jun  8 11:43:10 2001 提到:

因为他的六面体给的形式是8个点,所以一定是凸的
8个点不能确定一个凹的六面体

凹的也能做,不过他要给定每个面,而不是8个点

而且凹的比较麻烦,也比较统一.
随便什么多面体算法都一样 .

从所求得点向无穷远作射线
和多面体交偶数次说明在外面
奇数次说明在里面

说说简单,不过要做线交面,有一点烦.

阅读:
打印
相关新闻       相关关键词: