计算机图形学-第4章 几何计算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

青岛农业大学
4.1.5最大最小判别法
如果两个图形元素的最小矩形包围盒子不相重迭,则这
两个图形元素不可能相交。
最小最大判定法提供了这样一种快速拒绝判定法,这个 判定法是用图形元素的最小外接矩形(或矩形盒子)来 替代,用以粗略地判定两个图形元素之间的某种关系。 虽然,这种判定条件是一种充分条件,在某些情况下,
其适用性能从凸多边形扩展到一般多边形
青岛农业大学
4.1.4包容性测试——Griffiths判别法
为了在角度判别法中避免求取反三角函数, Griffiths 在 1981年提出了一种近似的方法以加快
运算速度。
基本原理: 矢量积 PtPi×PtPi+1 与 sinαi 成正比,而数量 积 PtPi•PtPi+1 与 cosαi 成正比 , 于是 tgαi 或 ctgαi 可由 这两个积的结果导出。
令R是一条以P为起点任何方向的半射线 当R和多角形的交点个数为奇数个时,点P在多角形 的内部 当交点个数为偶数或为零时,点P在多角形的外部
若选择的半射线通过多角形的顶点,或与多角形的边 重合时,根据向量交点的特征值、重点和重边的处理原则 进行交点的取舍,然后计数。
青岛农业大学
算法P:半射线交点计数包容性测试算法
列的有向凸包。这样求得的凸包是一个循环点列,选 取任一个起点均可作为凸包的起点。
青岛农业大学
4.1.4 包容性测试
决定平面上的一个点是在图形的内部 还是在它的外部 符号判别法 角度判别法 Griffiths判别法 半射线交点计数判别法
青岛农业大学
4.1.4包容性测试——符号判别法
对于一个凸 n 多边形,按照同一方向(保证边向量的 左侧为多边形的内部)计算通过各边向量的直线的方 程系数 (Ai , Bi , Ci) (i=1,2,……n) 设被测试点为T(Xt,Yt),计算 Di=Aixt+Biyt+Ci (i=1,2,……n) 若 Di>0( 或 Di=0) ,则被测试点在多边形的外部 ( 或在 边界上),判断结束。 否则,所有的Di<0 (i=1,2,……n),表示被测试点在 图形的内部。
y
y
A
P B x P
B
A x
青岛农业大学Βιβλιοθήκη Baidu
当T<0时,AP斜率>BP斜率,为顺时针角 当T>0时,AP斜率<BP斜率,为逆时针角
4.1.4包容性测试——角度判别法
这种角度的计算不需要很高的精度,其误 差甚至可以达到π也不失判别的正确性 但是必须计算两向量间的夹角而涉及到反 三角函数的计算,计算工作量较大 计算量虽也是O(n),但要比符号判别法的 工作增加几倍
第二篇 几 何
青岛农业大学
第4章 几何计算
青岛农业大学
主要内容
判断计算
拐向判断 凸包算法 包容性测试 ……
距离和面积
点到平面上一直线的距离 点到一空间直线的垂足 点到平面的距离 ……
相交计算
直线与平面相交 平面与平面相交 曲线与曲线相交 ……
设空间有两条线,其端点分别为P1、P2和Q1、 Q2,方程分别为:
x x p1 ( x p 2 x p1 ) y y p1 ( y p 2 y p1 ) z z p1 (z p 2 z p1 )
x x q1 ( x q 2 x q1 ) y y q1 ( y q 2 y q1 ) z z q1 (z q 2 z q1 )
Min
青岛农业大学
4.1.3 凸包算法——Graham算法
G4【求凸包上的一个顶点】 :从点 1 出发依次考
察连续的三个顶点,如果是向逆向转(图中实心圆 点),则表的指针加1,否则删去三个顶点中的中间点 (图中空心圆点),且指针减1;
顺向点 逆向点
G5【求取凸包】:按G4遍历点表,其结果即为点
D Ax p B y C z p D
p


N
s
其中:Ns为平面的法向量。 注意: 1、若空间平面方程是规格化的,则点到面的距离直接把点
的坐标代入平面方程即可。
2、点到平面的距离符号标示点在面的方位。
青岛农业大学
4.2 距离与面积
三个相继的点会组成一个左拐,若三个相继的点组成一
个右拐,即中间点位于三点组成的三角形内,可以直接 去除该点。
青岛农业大学
4.1.3 凸包算法——Graham算法
G1【找内点】:找到点列的一个内点 G,从内 点作水平向右的一向量L; G2【排序】:连接内点和全部点列,根据这些 连线与 L 的夹角按递增次序对点列排序,形成 一个双向链接表; G3【求凸包上的起点】:求取点列中的任一个 极点P0(x或y的最小/最大者);
青岛农业大学
4.2 距离与面积
3、点到空间直线的距离
D
p p N
0
L
N
L
其中:NL是直线的方向向量,P0是直线上任意点。
例:求点P(2,-1,1)到直线L的距离D。
x 2 y z 1 0 x 2 y z 3 0
青岛农业大学
4.2 距离与面积
4、点到平面的距离
P1【建立射线】由点Pt(Xt,Yt)向点(X∞,Yt)建立一
射线向量。其中X∞是一个多角形顶点不可能达到的X
大值,Yt意味着射线和X轴平行; P2【求交点】将此射线向量和多角形的各边向量求
交。并记录交点几何参数和相对于射线的特征值,
并将交点按其射线方向排队;
青岛农业大学
算法P:半射线交点计数包容性测试算法
P3【合并重点】判别相邻交点的几何参数,如为重点, 则求其特征值的代数和,如代数和为零,则取消两个 交点,否则取消其中一个交点; P4【合并相邻同特征交点】判别相邻两个交点的特征, 如果相邻两个特征相同,则取消其中一个交点;
P5【判别】计算交点个数,如为奇数,则点在多角形 内部,否则在多角形外部。
2)重叠性检验 如果两个多边形的最小包含矩形不发生重叠,则这两个多边 形必定不会重叠,则下式必有一个成立:
x x y y
A max A min
A max A min
x x y y

B min
B max B min
B max
青岛农业大学
4.1.6 线与面的关系
令: D1= Ax1+By1+Cz1+D D2= Ax2+By2+Cz2+D D1(D2)<0 当 D1(D2)=0 分别令: N1(N2)= D1(D2)>0 -2 0 1
若||P1×P2 || > 0,则P2在P1的逆时针方向 若|| P1×P2 || < 0,则P2在P1的顺时针方向 若|| P1×P2 || = 0,则P2与P1共线
青岛农业大学
4.1.2折线段的拐向判断
对于有公共端点P2的线段P1P2和P2P3 ,通过
计算||(P2 - P1)×(P3- P2) ||的符号,即
n
0 i
点在多边形之外
B
E D
A
C

i 1
n
2 i
点在多边形之内
B
E
P
C
D
青岛农业大学
4.1.4包容性测试——角度判别法
夹角如何计算?

大小:利用余弦定理 方向:令
T
x A xP xB xP
y A yP yB yP
( x A xP )(y B y P ) ( xB xP )(y A y P )
青岛农业大学
4.1.4包容性测试——Griffiths判别法
角度αi可由下列近似的线性逼近公式求得: arctg x=π/4×x+C 其中
1 4 4 C arctg 1 1 88.35 2 4
青岛农业大学
4.1.4包容性测试——半射线交点判别法
且令:N=N1+N2
青岛农业大学
4.1.6 线与面的关系
则当N≤-2,线在面的后面( N=-2 ) N=0, 线在面上(正面或背面)
以此线两顶点为端点的两相邻线的另两个端点的状态决定
若另两个端点中有一端点在面的前面,则此线棱在面的 正面; 若另两端点均在面之后,此时线在面的背面
青岛农业大学
4.1.7 线与线的关系
求 得 它 们 在 XOY 投 影 面 上 的 交 点 S ( P1P2 上的 P 点和 Q1Q2 和 μs 若λs∈[0,1]且 μs∈[0,1], 则这两条线在空间 存在遮挡关系
上的 Q 点在 XOY 上的重 合 投 影 点 ) 的 参 数 λs
青岛农业大学
4.1.7 线与线的关系
将λs和μs分别代入深度方程 zp=zp1+(zp2-zp1)λs zq=zq1+(zq2-zq1)μs 若 zp > zq P1P2在Q1Q2的前面 zp = zq P1P2与Q1Q2在同一平面上 zp < zq P1P2在Q1Q2后面
青岛农业大学
4.2 距离和面积
青岛农业大学
4.1判断计算
决定几何间的位置和方向的计算
点、线段在线段、圆、折线、多边形上、 内和外的判断计算。
几何位置关系判断计算:切、交、离、含
等 。
青岛农业大学
4.1.1 折线段的拐向判断_原理
向量叉积的模的定义: || P1×P2 ||=
x1 y1 x2 y 2
=x1y2 - x2y1,其结果是一个标量。
1、点到平面上直线的距离
将点的坐标代入直线方程即可。
D ax p b y c
p
2、点到空间直线的垂足
设nL是直线L的单位方向向量,P0是L上的任意一点, P是空间中的任意一点,则P在L上的垂足Pv为:
p
v
p
p p n n
0 l
l
例:已知点P0(0,0,0),PL(1,1,1),直线L由P0、PL决定, 求点P(0.5,1,0)到直线L的垂足PV。
青岛农业大学
4.1.4包容性测试——符号判别法
在此判别法中,多边形为凸的条件不能少
虽然有
A45xt +B45yt + C45 > 0 而T却在多边形的内部。
青岛农业大学
4.1.4包容性测试——角度判别法
依次将测试点P与多边形各顶点相连,然后计算点P与各 顶点围成的角度之和
A
P

i 1
这种替代是不正确的,但由于其比较速度很快的优点
弥点补了这种不足。
青岛农业大学
4.1.5最大最小判别法
a.外接矩形不相迭,图形也不相迭 b.外接矩形相迭,但图形并不相迭 c.外接矩形相迭,图形也相迭
青岛农业大学
4.1.5最大最小判别法
1)找出多边形的最小包含矩形
该矩形的4条边分别平行于两坐标轴,矩形的位置和大小可以 用Xmax、Xmin、Ymax、Ymin来定义,而这4个参数就是多边形顶点 坐标中的极值。
青岛农业大学
4.1.3 凸包算法
基本思想:用形状简单的几何体(凸包)将形状复杂 的物体包围起来,由物体的凸包进行粗略检测,当两
凸包不相交时,其相应的两原物体间一定不相交,从
而快速排除那些不可能相交的物体。
青岛农业大学
4.1.3 凸包算法——Jarris算法
设S为平面内的点的集合, 从S中将y坐标最小
N>0,线在面之前( N=1 和 N=2 )
青岛农业大学
4.1.6线与面的关系
N=-1, 线贯穿面; 令λ=│D1│/ (│D1│+│D2│) 若N2<0(P2点在面后), 则棱的[0,λ]间的部份(P1P)在面的前面;
否则,棱的[0,λ]间的部份在面的后面。
青岛农业大学
4.1.7 线与线的关系
C= x2 y2 1 便可以确定折线段的拐向。
x3 y3 1 x1 y1 1
若C> 0,则P1P2在P2点逆时针旋转后得到P2P3 若C < 0,则P1P2在P2点顺时针旋转后得到P2P3 若C = 0,则P1 、 P2 、P3共线
青岛农业大学
4.1.3 凸包算法
凸包计算的基本任务就是确定两个或多个物体彼此 之间是否发生接触或穿透。 一个图形的凸包就是包含这个图形的一个面积最小 的凸多边形,构成凸包的点称为凸包点,其余点称为凸 包内点。
的点作为凸包的第一个顶点H1, 找到与以H1为起点
的水平线的叉积为正且夹角最小的点,作为凸包的 第二个顶点H2 , 再求与线段H1H2叉积为正且夹角 最小的点,作为凸包的第三个顶点,……,直到返 回第一个顶点。
青岛农业大学
4.1.3 凸包算法——Graham算法
对于一个有序点集,如果所有点都在凸包上,则每
相关文档
最新文档