所以基本上我在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
(允许半径)肯定是错误的。我不确定还有什么不对。那么如何确定给定高度的允许半径?
答案 0 :(得分:0)
您的permRadius
公式错误。正确的(检查z = 0, z=Height, z=Height/2
):
permRadius = self.baseRadius - (self.baseRadius - self.topRadius) * (z /self.Height)