检查点是否在锥体内

时间:2016-03-01 19:25:43

标签: python 3d geometry

所以基本上我在3D空间中定义了一个圆锥体。锥体由基准中心,基部半径和顶部半径定义。

我想创建一个可以获取这些参数并确定给定点是否在锥体内的函数。

这就是我所拥有的:

import math

class Vector:
    def __init__(self, pos):
        self.X = pos[0]
        self.Y = pos[1]
        self.Z = pos[2]

class ConeShape:
    def __init__(self, pos, height, bRadius, tRadius):
        self.X = pos[0]
        self.Y = pos[1]
        self.Z = pos[2]

        self.baseRadius = bRadius
        self.topRadius = tRadius

        self.Height = height

    def Position(self):
        pos = [self.X, self.Y, self.Z]
        return Vector(pos)

    def ContainsPoint(self, x, y, z):
        z -= self.Z

        permRadius = (self.baseRadius - self.topRadius) * (z / self.Height)
        print(("Test: {0:0.2f}").format(permRadius))

        pointRadius = (math.sqrt((x - self.X) ** 2 + (y - self.Y) ** 2))

        if (z <= self.Height and z >= 0.0) and (pointRadius <= permRadius):
            return True
        return False

def main():
    cone = ConeShape([0.0, 0.1, 0.0], 10.0, 5.0, 0.1)
    if (cone.ContainsPoint(0.0, 0.1, 0.0)):
        print("Yes!")

    cone = ConeShape([0.0, 0.1, 0.0], 10.0, 5.0, 0.0)
    if (cone.ContainsPoint(0.0, 0.1, 0.0)):
        print("Yes!")

main()

我的permRadius(允许半径)肯定是错误的。我不确定还有什么不对。那么如何确定给定高度的允许半径?

1 个答案:

答案 0 :(得分:0)

您的permRadius公式错误。正确的(检查z = 0, z=Height, z=Height/2):

 permRadius = self.baseRadius - (self.baseRadius - self.topRadius) * (z /self.Height)