• 常见几何计算

    • 基础计算

      • 向量点乘
      • 向量叉乘
    • 点和线之间计算
      • 点是否在直线上
      • 点是否在线段上
      • 点是否在三角形内部
      • 点到直线的距离
      • 直线之间的距离
      • 点到线段的距离
      • 点到三角形距离

在做毕设过程中,进行三角网格处理的时候经常会遇到例如点与线段最短距离,点与三角形最短距离等计算,在这里汇总下,如遇到新的会不断更新。

常见几何计算

基础计算

向量点乘

向量点乘: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
转化为三阶行列式:

\begin{vmatrix} i & j & k \\ a_{x} & a_{y} & a_{z} \\ b_{x} & b_{y} & b_{z} \end{vmatrix}
二维情况:
二维的简化情况:

a→×b→=(axby−aybx)ka→×b→=(axby−aybx)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

点是否在线段上

  1. 判断点是否在直线AB上,判断过程同上。
  2. 点C需要在以AB为对角线的矩形内,这限制在AB线段内。【C的每一维坐标必须在AB之间】

点是否在三角形内部

  • 面积法
    三角形三个点ABC和点P。计算ABC面积,ABP面积,ACP面积,BCP面积,如果后三个面积相加等于ABC面积,说明在三角形内部。

  • 退化到二维:叉乘方向
    如果点在三角形内部,则按照逆时针,满足P在三条边的左边,可以根据叉乘方向判断,ABPA叉乘,如果三个叉乘方向都相同,说明在三角形内部。

点到直线的距离

  • 几何做法
    假设给出三个点,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+B2

    d=\frac{\mid Ax_{0}+By_{0}+C\mid}{\sqrt{A^{2}+B^{2}}}

直线之间的距离

  • 几何做法
    在一条直线上选取一个点,在另外一条直线选取两点,转化为计算点到直线距离。

  • 解析做法
    只有两条直线相互平行,才有距离,因此解析方程的AB相同:

    d=∣C2−C1∣A2+B2−−−−−−−√d=∣C2−C1∣A2+B2

    d=\frac{\mid C_{2}-C_{1}\mid}{\sqrt{A^{2}+B^{2}}}

点到线段的距离

  1. 首先判断线段两点是否重合,如果重合,转化为点到点距离;
  2. 判断点是否在直线上,如果在直线上:进一步判断是否在线段内,如果在,距离为0;否则计算到两个顶点的距离,取较小值。
  3. 计算AC,BC的夹角,如果都为锐角,则最短距离即为点到直线距离。
  4. 否则,计算到两点的最近距离。

点到三角形距离

题设:P和三角形ABC
1. 判断三角形三个点是否重合,重合转为点到点距离;
2. 判断三角形是否有两点重合,重合转为点到线段距离;
3. 判断三角形是否构成:是否三点共线,如果共线计算点到两条线段ABAC的最短距离就可以。
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垂直于ABAC可以得到两个方程,解方程可以得到t1,t2t1,t2t_{1},t_{2}
5. 根据t1,t2t1,t2t_{1},t_{2}计算出垂足点,并判断是否在三角形内,如果在内,则距离即为PT
6. 否则,计算垂足点到三角形三条边的最短距离d,点到三角形最短距离:sqrt(d^2 + PT^2)

完整的代码见github地址

如有错误,欢迎指正~

图形学中常用计算几何总结相关推荐

  1. 成为计算几何master之路——记算法竞赛中常用的计几算法及思想

    文章目录 成为计算几何MASTER(FAKE)之路 1 引言 1.1 精度 1.2 剖分 1.3 层次化设计 2 点,向量和线 2.1 点积和叉积 2.2 线段(直线) 2.2.1 点在线段上判定 2 ...

  2. 数学系列:数学在计算机图形学中的应用

    宇宙的琴弦 博客园 首页 新随笔 联系 订阅 管理 随笔 - 60   文章 - 0   评论 - 0 数学系列:数学在计算机图形学中的应用 Copyright © 1900-2016, NORYES ...

  3. 数学在计算机图形学中的应用

    数学在计算机图形学中的应用 刘利刚 中国科技大学 "学习计算机图形学需要多少的数学?"这是初学者最经常问的问题. 狭义的计算机图形学指的是传统的三维建模,绘制,动画等,而广义的计算 ...

  4. 数学字计算机图形学中的应用

    Greg Turk的文章,对自己有一定的借鉴意义 原文链接来自:https://www.cc.gatech.edu/~turk/math_gr.html 1.只是为了使用图形软件,如Photoshop ...

  5. ACM 中常用的算法有哪些? 2014-08-21 21:15 40人阅读 评论(0) 收藏...

    ACM 中常用的算法有哪些?作者: 张俊Michael 网络上流传的答案有很多,估计提问者也曾经去网上搜过.所以根据自己微薄的经验提点看法. 我ACM初期是训练编码能力,以水题为主(就是没有任何算法, ...

  6. 计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具

    计算机图形学 opengl版本 第三版------胡事民 第四章  图形学中的向量工具 一   基础 1:向量分析和变换   两个工具  可以设计出各种几何对象 点和向量基于坐标系定义 拇指指向z轴正 ...

  7. GIS开发中常用几何算法原理图解

    转自:OSGeo中国中心 http://www.osgeo.cn/post/ae457 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简 ...

  8. 计算机图形学中需要掌握的数学基础知识有哪些?

    计算机图形学中使用了大量数学知识,尤其是矩阵和线性代数.虽然我们倾向于认为3D图形编程是紧跟最新技术的领域之一(它在很多方面确实是),但它用到的很多技术实际上可以追溯到上百年前,其中一些甚至是由文艺复 ...

  9. 计算机视觉 专业术语,计算机视觉中常用的术语.doc

    计算机视觉中常用的术语 计算机视觉常用术语中英文对照(1) 2011-06-08 21:26 ??Artificial Intelligence 认知科学和神经科学Cognitive Science ...

  10. 计算机图形学是研究真实,计算机图形学论文真实感制图技术在图形学中的应用...

    <计算机图形学论文真实感制图技术在图形学中的应用>由会员分享,可在线阅读,更多相关<计算机图形学论文真实感制图技术在图形学中的应用(9页珍藏版)>请在人人文库网上搜索. 1.总 ...

最新文章

  1. 已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在tab表中,要查的学生学号放在变量no中,查表结果放在变量english中。
  2. Spring Cloud Hystrix理解与实践(一):搭建简单监控集群
  3. 魔兽世界美服部落人数最多服务器,魔兽世界全球服务器最新人口普查,其实并没有你想象的那么少...
  4. 审查元素上传php,KindEditor上传解析漏洞/列目录/内容漏洞_PHP教程
  5. 快速创建springboot项目:使用http://start.spring.io/网页创建,使用IDEA的Spring Initializr创建,使用SpringBoot CLI创建
  6. 学会用core dump调试程序错误
  7. vfp 8.0中image控件的属性:RotateFlip
  8. 如何设置Windows版Go —快速简便的指南
  9. idea 调试 js
  10. 2021-2025年中国超声波管道监测系统行业市场供需与战略研究报告
  11. Twitter 有权删除去世用户的账号吗?
  12. 使用Sakura查看字符十六进制编码(附带ASCII编码表)
  13. Java多线程系列--“JUC线程池”
  14. 无法读源文件或磁盘的处理
  15. [转载]北京的六条经典徒步线路
  16. 3. Python脚本学习笔记三字符串
  17. 电容能抗多大的ESD?
  18. fetch bulk collect limt 学习
  19. 最好的体育测试软件,体育锻炼标准测试app
  20. 23、实时汇率API接口,免费好用

热门文章

  1. Burp Suite CA证书下载及导入教程
  2. 基于华为eNSP的企业网络规划
  3. 字节跳动怎么都十万人了?
  4. Sqlite可视化工具sqliteman安装
  5. windows 搭建代理服务器 - Apache httpd
  6. 群表示论之二面体群的不可约实表示的求法
  7. 天正电气T20 V6完全使用指南
  8. 计算机网络谢希仁课后答案详解+计算机网络释疑与习题解答PDF+各章重点题目
  9. gateface php,XAMPP下载-Xampp(PHP环境套件)V8.01 官方win版-ucbug软件站
  10. xml转json(使用工具)