【问题标题】:How to find whether a point in a 3D space lies inside a truncated cone?如何查找 3D 空间中的点是否位于截锥内?
【发布时间】:2014-07-04 18:05:11
【问题描述】:

How can I detect if a point is inside a cone or not, in 3D space? 无济于事,因为截锥可以是圆柱体。

我尝试了另一种方法,它涉及的计算量很大,而且很大。

我正在寻找更简单的方法来查找截锥内某个点的存在/不存在。

Mid point of bottom of the truncated cone -> x,y,z
Mid point of top of the truncated cone -> x, y2, z
BottomRadius = r1
TopRadius = r2

【问题讨论】:

    标签: algorithm math 3d vector-graphics


    【解决方案1】:

    似乎测试两个条件就足够了,这两个条件都必须为真:

    • 该点必须在锥底之上,锥顶之下。一维测试。使用距锥底的距离进行下一步,仅当发现此步骤的结果为真时才执行。
    • 该点必须在圆锥切片的圆周内,由与底部的距离决定。同样是一个相对简单的一维测试(点到锥轴的距离与切片半径的比较)

    看起来很简单,还是我遗漏了什么?

    【讨论】:

    • 这在我的脑海中是如此复杂,但你完全简化了它。
    【解决方案2】:

    对不起,草率的表述,但我会按照以下方式进行:

    1. 计算两个圆锥圆的中心点 c_1、c_2。
    2. 计算通过 c_1 和 c_2 的线
    3. 计算点 p 到这条线的距离,并在此期间计算线上最接近 p 的点 q(参见 Wikipedia article
    4. 如果 q 不在 c_1 和 c_2 之间,则 p 在外面
    5. 如果 q 介于 c_1 和 c_2 之间,则距离 dist(p,q) 必须小于点 q 处圆锥的半径。也许半径可以这样计算: r(q) := dist(q,c_1)/dist(c_1, c_2) * r_1 + dist(q,c_2)/dist(c_1, c_2) * r_2 其中 r_1 为c_1 处的圆半径,r_2 是另一个圆的半径。
    6. 所以 if dist(p,q) > r(q) ,点在外面

    所以要测试两个条件

    【讨论】:

    • 这个方法是我指定的“涉及太多计算的方法”。 :)
    • 我认为这描述了几乎相同的方法,只是用不同的词。
    • 它看起来只是更复杂,因为我试图包含实际的公式 :-) 但是布什米尔和我有相同的想法,所以这表明这可能是一个很好的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2021-09-07
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多