如何在Lua(或其他语言)中确定点是否在两个其他点之间的直线上?
2017-5-8 17:35:20
收藏:0
阅读:115
评论:2
我有两个点 a 和 b(3D 矢量)之间的一条线,并且有第三个点 p(来自标量投影)。
我想确定第三点 p 是否在点 a 和点 b 之间的直线上或不在它们之间。
对于 LuaJIT,最有效的算法是什么?其他语言也可以,但效率很重要
感谢 numberZero,我得到了这个代码,它似乎可以工作
function vec3d:is_between(a, b)
local ab = b - a
local ap = self - a
local lp = ap:len()
local lb = ab:len()
local dot = ap:dot(ab) / (lp * lb)
return lp < lb and dot > 0.95
end
点赞
用户6368531
如果你知道这些点在同一条直线上,你可以只计算一个点积,如果 _0 ≤ 〈AB, AP〉 ≤ 〈AB, AB〉_,那么 P 就在 A 和 B 之间。但注意,如果 P 不恰好在直线上,这个方法可能会给出奇怪的结果。但这应该是最快的方法。
你也可以计算两个值,P 到 AB 的距离和(正交的)AP 投影到 AB 上。后者为 _AP_AB = 〈AP, AB〉/〈AB, AB〉_(在 AB 单位上,所以如果 AP 和 AB 共线,_AP = AB * AP_AB_),前者为 _ρ(P, AB) = ρ(AP, AB * AP_AB) = |AP - AB * AP_AB|_。所以,如果 ρ(P, AB) 很小,你可以决定如果 _0 ≤ AP_AB ≤ 1_,那么 P 就在 A 和 B 之间。
2017-05-07 22:44:06
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

如果你已经知道这三个点共线,你可以计算向量 AP 从 a 到 p 和向量 AB 从 a 到 b。如果 p 在 a 和 b 之间,那么 AP 和 AB 的点积将等于1(即向量指向相同方向),而 AP 的向量大小将小于 AB 的大小。
如果你不知道这些点是否共线,也很容易检查。你可以通过实现一个测试距离比例来确定三个点 x i = (xi, yi, zi) 的共线性,其中 i = 1,2,3:
就像这篇关于共线性的 Wolfram Mathworld 文章 中所解释的那样。从同一篇文章中,一个更简单的条件