判断三维点是否在另一个长方体(正方体 或者四方体)内 仅逻辑 没有代码
作者:互联网
本文思路来源
https://blog.csdn.net/somethingok/article/details/118712440
1.遇到的问题 就是想判断游戏中某个点是否在长方体盒子内 正方形亦可。球体直接判断半径距离。四方体也适用。
2.我把上文链接中的思路转换成了我自己的思路 借用一下人家的图
3.准备 需要待检测点的坐标 和长方体的8个坐标(我觉得其实只用 以一个顶点延申出去的三条表的点和这个顶点 四个点坐标就够了,当然知道长方体中心点的坐标和长宽高也可以算出这四个点。无非是 长/2,宽/2,高/2 的变化正负而已 不会的话百度或者问人好吧。)
4.下面时思路
(1)长方体 是由三对 互相平行的面组成 我觉得 三个方向 x y z 方向的两个平行面的相交的部分就是长方体。
(2)问题转化成 判断点是否在三对互相平行的面之间了。
(3)判断点是否在两个面之间 我想用这个理论 以这个待监测点 P 为顶点 两个平行面的距离 作为底 组成的三角形
两底角都是锐角 p 一定在两个平面内 如果两个底角有一个是直角 那p在两个面之一的面上。
(4)以长方体一个顶角为基础 延申出去的三条边 可以代表三个面的高了 然后检测 分别以这三条高为底 p为顶点
的三角形,两个底角是否小于(在长方体内)等于(在长方体表面)。
(5)两个向量的点积 可以判断 两个向量的夹角是否小于90 等于90 大于90(这是点积公式自己百度吧)
5.用 4 中的图 我说下最终的公式
点P 在 面ABED 面OCFG内(上) boolean inOnABEDOCFG = 向量AO * 向量AP >=0 && 向量OA * 向量OP >=0
点P 在 面AOGD 面BCFE内(上) boolean inOnAOGDBCFE = 向量OP * 向量0C >=0 && 向量CO * 向量CP >=0
点P 在 面DEFG 面ABCO内(上) boolean inOnDEFGABCO = 向量OG * 向量OP >=0 && 向量GP * 向量GO >=0
三个同时满足 就表示 是在长方体内(上)
inOnABEDOCFG && inOnAOGDBCFE && inOnDEFGABCO
如果不想要在表面的 取消等于0 只要大于0就行了
标签:正方体,两个,三维,&&,90,长方体,向量,OP 来源: https://www.cnblogs.com/cloudHui/p/16473230.html