给定圆环的原点和半径,如何确定点p(x,y,z)是否在圆环内部?
2012-11-21 19:15:41
收藏:0
阅读:135
评论:3
我正在尝试在方块游戏中创建一个三维环面体,因此需要评估一系列坐标,查看它们是否在环面内。我使用球体的方式是:
shapefunc = function (pos,fields)
map = {}
pos.x = math.floor(pos.x+0.5)
pos.y = math.floor(pos.y+0.5)
pos.z = math.floor(pos.z+0.5)
for x=-fields.radius,fields.radius do
for y=-fields.radius,fields.radius do
for z=-fields.radius,fields.radius do
if x*x+y*y+z*z <= fields.radius*fields.radius then
table.insert(map,{x=pos.x+x,y=pos.y+y,z=pos.z+z})
end
end
end
end
return map
end
给定高度(在y轴上),一个次半径和主半径(在xz轴上)以及一个起点,我尝试的任何评估表达式都没有给我任何接近环面的东西。
点赞
用户2799136
上面的公式对我不起作用。考虑 b = 0,公式应该缩小为一个圆,而在接受的答案中,它缩小为一个球体。
根据我的计算,您必须测试表达式的符号
(x ^ 2 + y ^ 2 + z ^ 2 + a ^ 2-b ^ 2)^ 2-4a ^ 2(x ^ 2 + y ^ 2)
其中点为 {x,y,z},圆环的小半径为 b,大半径为 a。
编辑:等效地,更接近最初接受的答案的表达式将是
(x ^ 2 + y ^ 2 + z ^ 2-(a ^ 2 + b ^ 2))^ 2-4a ^ 2(b ^ 2-z ^ 2)
2015-01-26 15:45:07
用户2035671
保留原本的 markdown 格式:
The solution by Paul didn't work for me. Instead, I came up with this simple working solution in Python:
def INSIDE_TORUS(p):
angle_xy = np.arctan2(p[1], p[0])
p = [p[0] - TOROIDAL_RADIUS * np.cos(angle_xy), p[1] - TOROIDAL_RADIUS * np.sin(angle_xy), p[2]]
return -POLOIDAL_RADIUS <= np.linalg.norm(p) <= POLOIDAL_RADIUS
其中 TOROIDAL_RADIUS 是大半径,POLOIDAL_RADIUS 是小半径。
假定该环绕体以原点为中心,其大半径位于 XY 平面上。
这个函数实现的方法很简单,只需将小圆环“推回”至原点,通过减去大半径向量(在 XY 平面上)。
然后我们可以检查点 p 是否在小圆环内部。
在计算前,需要根据 np.arctan2(y, x) 获取 XY 平面中的角度。
2021-09-19 17:27:00
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
根据此处的说法,这是测试表达式符号的问题:
(x^2+y^2+z^2-(a^2+b^2))^2 - 4*a*b*(b^2-z^2)
其中点为{x,y,z},环面的次半径为b,主半径为a。