图形学中常用计算几何总结
- 常见几何计算
- 基础计算
- 向量点乘
- 向量叉乘
- 点和线之间计算
- 点是否在直线上
- 点是否在线段上
- 点是否在三角形内部
- 点到直线的距离
- 直线之间的距离
- 点到线段的距离
- 点到三角形距离
- 基础计算
在做毕设过程中,进行三角网格处理的时候经常会遇到例如点与线段最短距离,点与三角形最短距离等计算,在这里汇总下,如遇到新的会不断更新。
常见几何计算
基础计算
向量点乘
向量点乘:a→⋅b→=|a||b|cosθa→⋅b→=|a||b|cosθ\overrightarrow{a} \cdot \overrightarrow{b} = |a||b| cos \theta。
用途:向量点乘常用于判断向量是否垂直【垂直向量点乘为0】,向量的夹角大小。
几何意义:点乘以后是一个值,值的大小为向量模相乘再乘以coscoscos值。
代数计算:(x1,y1,z1)⋅(x2,y2,z2)=x1x2+y1y2+z1z2(x1,y1,z1)⋅(x2,y2,z2)=x1x2+y1y2+z1z2(x1,y1,z1) \cdot (x2,y2,z2) = x1x2+ y1y2+z1z2
向量叉乘
向量叉乘:|a→×b→|=|a||b|sinθ|a→×b→|=|a||b|sinθ|\overrightarrow{a} \times \overrightarrow{b}| = |a||b|sin \theta 即:|c|=|a×b|=|a||b|sin<a,b>|c|=|a×b|=|a||b|sin<a,b>|c|=|a×b|=|a| |b|sin 用途:向量叉乘常用于计算法线,计算体积面积等。
几何意义:叉乘得到的是一个向量,向量积的方向与这两个向量所在平面垂直,且遵守右手定则。
代数计算:
假设a→=(ax,ay,az),b→=(bx,by,bz)a→=(ax,ay,az),b→=(bx,by,bz)\overrightarrow{a} = (a_{x},a_{y},a_{z}),\overrightarrow{b} = (b_{x},b_{y},b_{z}),则:
a→×b→=(aybz−azby)i+(azbx−axbz)j+(axby−aybx)ka→×b→=(aybz−azby)i+(azbx−axbz)j+(axby−aybx)k\overrightarrow{a} \times \overrightarrow{b} = (a_{y}b_{z}-a_{z}b_{y})i+(a_{z}b_{x}-a_{x}b_{z})j+(a_{x}b_{y}-a_{y}b_{x})k
转化为三阶行列式:
\overrightarrow{a} \times \overrightarrow{b} = (a_{x}b_{y}-a_{y}b_{x})k
点和线之间计算
点是否在直线上
直线的两点为AB,判定点是C,只需要计算三角形ABC的面积,面积为0,代表三点在同一条线上。使用叉乘:a→×b→=|a||b|sinθa→×b→=|a||b|sinθ\overrightarrow{a} \times \overrightarrow{b} = |a||b|sin \theta
点是否在线段上
- 判断点是否在直线AB上,判断过程同上。
- 点C需要在以AB为对角线的矩形内,这限制在AB线段内。【C的每一维坐标必须在AB之间】
点是否在三角形内部
面积法
三角形三个点ABC和点P。计算ABC面积,ABP面积,ACP面积,BCP面积,如果后三个面积相加等于ABC面积,说明在三角形内部。退化到二维:叉乘方向
如果点在三角形内部,则按照逆时针,满足P
在三条边的左边,可以根据叉乘方向判断,AB
和PA
叉乘,如果三个叉乘方向都相同,说明在三角形内部。
点到直线的距离
几何做法
假设给出三个点,A,B和C,求点C到点A、B定出的直线间距离。首先计算向量CB和向量CA的叉乘,底边AB,得到点到直线距离。d=CB×CA∣AB∣d=CB×CA∣AB∣d = \frac{CB \times CA}{\mid AB\mid}
注:叉乘的结果是平行四边形的面积,除以一条边,即可得到高,即点到直线的距离解析做法
其中Ax0+By0+C=0Ax0+By0+C=0Ax_{0}+By_{0}+C = 0是直线方程:d=∣Ax0+By0+C∣A2+B2−−−−−−−√d=∣Ax0+By0+C∣A2+B2d=\frac{\mid Ax_{0}+By_{0}+C\mid}{\sqrt{A^{2}+B^{2}}}
直线之间的距离
几何做法
在一条直线上选取一个点,在另外一条直线选取两点,转化为计算点到直线距离。解析做法
只有两条直线相互平行,才有距离,因此解析方程的AB相同:d=∣C2−C1∣A2+B2−−−−−−−√d=∣C2−C1∣A2+B2d=\frac{\mid C_{2}-C_{1}\mid}{\sqrt{A^{2}+B^{2}}}
点到线段的距离
- 首先判断线段两点是否重合,如果重合,转化为点到点距离;
- 判断点是否在直线上,如果在直线上:进一步判断是否在线段内,如果在,距离为0;否则计算到两个顶点的距离,取较小值。
- 计算AC,BC的夹角,如果都为锐角,则最短距离即为点到直线距离。
- 否则,计算到两点的最近距离。
点到三角形距离
题设:P和三角形ABC
1. 判断三角形三个点是否重合,重合转为点到点距离;
2. 判断三角形是否有两点重合,重合转为点到线段距离;
3. 判断三角形是否构成:是否三点共线,如果共线计算点到两条线段AB
和AC
的最短距离就可以。
3. 三角形内任意一点可以表示为:T=A+t1AB−→−+t2AC−→−T=A+t1AB→+t2AC→T = A +t_{1}\overrightarrow{AB}+t_{2}\overrightarrow{AC},t1,t2t1,t2t_{1},t_{2}为0~1
之间而且t1+t2≤1t1+t2≤1t_{1}+t_{2}\le 1
4. 则对于PT
垂直于AB
和AC
可以得到两个方程,解方程可以得到t1,t2t1,t2t_{1},t_{2}
5. 根据t1,t2t1,t2t_{1},t_{2}计算出垂足点,并判断是否在三角形内,如果在内,则距离即为PT
6. 否则,计算垂足点到三角形三条边的最短距离d
,点到三角形最短距离:sqrt(d^2 + PT^2)
完整的代码见github地址
如有错误,欢迎指正~
图形学中常用计算几何总结相关推荐
- 成为计算几何master之路——记算法竞赛中常用的计几算法及思想
文章目录 成为计算几何MASTER(FAKE)之路 1 引言 1.1 精度 1.2 剖分 1.3 层次化设计 2 点,向量和线 2.1 点积和叉积 2.2 线段(直线) 2.2.1 点在线段上判定 2 ...
- 数学系列:数学在计算机图形学中的应用
宇宙的琴弦 博客园 首页 新随笔 联系 订阅 管理 随笔 - 60 文章 - 0 评论 - 0 数学系列:数学在计算机图形学中的应用 Copyright © 1900-2016, NORYES ...
- 数学在计算机图形学中的应用
数学在计算机图形学中的应用 刘利刚 中国科技大学 "学习计算机图形学需要多少的数学?"这是初学者最经常问的问题. 狭义的计算机图形学指的是传统的三维建模,绘制,动画等,而广义的计算 ...
- 数学字计算机图形学中的应用
Greg Turk的文章,对自己有一定的借鉴意义 原文链接来自:https://www.cc.gatech.edu/~turk/math_gr.html 1.只是为了使用图形软件,如Photoshop ...
- ACM 中常用的算法有哪些? 2014-08-21 21:15 40人阅读 评论(0) 收藏...
ACM 中常用的算法有哪些?作者: 张俊Michael 网络上流传的答案有很多,估计提问者也曾经去网上搜过.所以根据自己微薄的经验提点看法. 我ACM初期是训练编码能力,以水题为主(就是没有任何算法, ...
- 计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具
计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具 一 基础 1:向量分析和变换 两个工具 可以设计出各种几何对象 点和向量基于坐标系定义 拇指指向z轴正 ...
- GIS开发中常用几何算法原理图解
转自:OSGeo中国中心 http://www.osgeo.cn/post/ae457 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简 ...
- 计算机图形学中需要掌握的数学基础知识有哪些?
计算机图形学中使用了大量数学知识,尤其是矩阵和线性代数.虽然我们倾向于认为3D图形编程是紧跟最新技术的领域之一(它在很多方面确实是),但它用到的很多技术实际上可以追溯到上百年前,其中一些甚至是由文艺复 ...
- 计算机视觉 专业术语,计算机视觉中常用的术语.doc
计算机视觉中常用的术语 计算机视觉常用术语中英文对照(1) 2011-06-08 21:26 ??Artificial Intelligence 认知科学和神经科学Cognitive Science ...
- 计算机图形学是研究真实,计算机图形学论文真实感制图技术在图形学中的应用...
<计算机图形学论文真实感制图技术在图形学中的应用>由会员分享,可在线阅读,更多相关<计算机图形学论文真实感制图技术在图形学中的应用(9页珍藏版)>请在人人文库网上搜索. 1.总 ...
最新文章
- 已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在tab表中,要查的学生学号放在变量no中,查表结果放在变量english中。
- Spring Cloud Hystrix理解与实践(一):搭建简单监控集群
- 魔兽世界美服部落人数最多服务器,魔兽世界全球服务器最新人口普查,其实并没有你想象的那么少...
- 审查元素上传php,KindEditor上传解析漏洞/列目录/内容漏洞_PHP教程
- 快速创建springboot项目:使用http://start.spring.io/网页创建,使用IDEA的Spring Initializr创建,使用SpringBoot CLI创建
- 学会用core dump调试程序错误
- vfp 8.0中image控件的属性:RotateFlip
- 如何设置Windows版Go —快速简便的指南
- idea 调试 js
- 2021-2025年中国超声波管道监测系统行业市场供需与战略研究报告
- Twitter 有权删除去世用户的账号吗?
- 使用Sakura查看字符十六进制编码(附带ASCII编码表)
- Java多线程系列--“JUC线程池”
- 无法读源文件或磁盘的处理
- [转载]北京的六条经典徒步线路
- 3. Python脚本学习笔记三字符串
- 电容能抗多大的ESD?
- fetch bulk collect limt 学习
- 最好的体育测试软件,体育锻炼标准测试app
- 23、实时汇率API接口,免费好用