计算几何课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《计算几何课件.pptx》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算 几何 课件
- 资源描述:
-
1、计算几何ppt课件概述基础点、线、面进阶多边形、半平面图形学辅助设计数字可视化机器人技术地理信息集成电路辅助工程计算机视觉题目比较长图形抽象,需要良好的数学基础和空间想象能力有许多容易忽视的特殊情况,而且往往需要单独处理,代码量大需要考虑浮点运算时产生的精度误差可以与其他类型的题目结合,从而更加复杂常作为压轴题目出现在程序设计竞赛中用矢量描述计算几何中的基本元素计算机如何理解计算机如何理解沿用解析几何中的表示方法?点 P(x,y,z)线 x=axt+bx,y=ayt+by,z=azt+bz面 ax+by+cz+d=0特殊特殊情况情况太多太多表示简单功能强大特殊情况少,思维难度较低函数可重复利用
2、(即所谓的“模版”)尽可能避免除法和三角函数,精度高,效率高class CVector double x,y,z;CVector operator+(CVector p,CVector q)return CVector(p.x+q.x,p.y+q.y,p.z+q.z);CVector operator-(CVector p,CVector q)return CVector(p.x-q.x,p.y-q.y,p.z-q.z);CVector operator*(double k,CVector p)return CVector(k*p.x,k*p.y,k*p.z);性质:pq=|p|q|cos功能
3、:求距离;求同向还是异向;求投影;判断是否在半空间上double operator*(CVector p,CVector q)return p.x*q.x+p.y*q.y+p.z*q.z;性质:在二维情况中,|pq|=|p|q|sin功能:求面积(体积);求顺时针方向还是逆时针方向;判断是否在半平面上CVector operator(CVector p,CVector q)return CVector(p.y*q.z q.y*p.z,p.z*q.x q.z*p.x,p.x*q.y q.x*p.y);矢量与自身点积double length(CVector p)return sqrt(p*p);
4、矢量除以自身的长度CVector unit(CVector p)return 1/length(p)*p;矢量与该方向单位矢量的点积注意:负数表示反方向double project(CVector p,CVector n)return dot(p,unit(n);npp两个矢量的叉积的模长的一半注意:得到的面积为有向面积,可能为负double area(CVector p,CVector q)return length(vector(p,q)/2;pqclass CPoint double x,y,z;class CLine CPoint a,b;class CSurface CPoint a
5、,b,c;double PI=acos(-1);double INF=1e20;double EPS=1e-6;CPoint O(0,0,0);bool isZero(double x)return EPS x&x EPS;从A点指向B点的矢量AB可用B-A来表示将A点沿矢量p移动到B可以用A+p来表示CVector operator-(CPoint b,CPoint a)return CVector(b.x a.x,b.y a.y,b.z a.z);CPoint operator+(CPoint a,CVector p)return CPoint(a.x+p.x,a.y+p.y,a.z+p.
6、z);任取平面上两条不平行的矢量求叉积,即可得到一个法向量double normal(CSurface s)return(s.b s.a)(s.c s.a);BACS求距离求位置关系求垂足求交点、交线求夹角求距离求位置关系求垂足求交点、交线求夹角利用两点间矢量的模长应用:圆与点的位置关系double dist(CPoint p,CPoint q)return length(p q);利用叉积求面积,然后除以底即为高应用:求直线与球的交点拓展:点与线段距离(需考虑顶点位置)double dist(CPoint p,CLine l)return fabs(p l.a)(l.b l.a)/lengt
7、h(l.b l.a);PABl利用面的法向量拓展:线段与面的距离(需考虑顶点位置)double dist(CPoint p,CSurface s)return fabs(project(p s.a,normal(s);ASPn先求公垂线,然后在两直线上各找一点,求这两点间的矢量在公垂线上的投影注:若两直线平行,则可将问题转变为点与线的距离double dist(CLine l,CLine m)CVector n=(l.b l.a)(m.b m.a);if(isZero(length(n)return dist(l.a,m);return fabs(project(l.a m.a,n);n求距离
8、求位置关系求垂足求交点、交线求夹角旋转矢量AB到AC注:在xy平面上逆时针旋转角(弧度制)CPoint rotate(CPoint b,CPoint a,double alpha)CVector p=b a;return CPoint(a.x+(p.x*cos(alpha)-p.y*sin(alpha);a.y+(p.x*sin(alpha)+p.y*cos(alpha);ABC应用:过点作面的垂线(即法向量的平行线)CLine parrllel(CPoint p,CLine l)return CLine(p,p+(l.b l.a);lP拓展:过点作与线成角的线(二维)CLine Vertic
9、al(CPoint p,CLine l)return CLine(p,p+(rotate(l.b,l.a,PI/2)l.a);lP求距离求位置关系求垂足求交点、交线求夹角利用点积求投影,进而求出垂足应用:求对称点注:在平面上也可作垂线,利用线与线交点(后面会提到)来求CPoint foot(CPoint p,CLine l)return l.a+project(p l.a,l.b l.a)*unit(l.b l.a);PHlBA利用点积求投影,进而求出垂足应用:求对称点CPoint foot(CPoint p,CSurface s)return p+project(s.a-p,normal(s
10、)*unit(normal(s);ASPnH求距离求位置关系求垂足求交点、交线求夹角先判断是否有唯一解(不平行),再利用叉积求解CPoint intersect(CLine l,CLine m,string msg)double x=area(m.a l.a,l.b l.a);double y=area(l.b l.a,m.b l.a);if(isZero(x+y)if(isZero(dist(l,m)msg=“重合”;else msg=“平行”;return null;return m.a+x/(x+y)*(m.b m.a);lmPyx先判断是否有唯一解(不平行不共面),再利用投影和垂足求解
展开阅读全文