0
“pos”是圆柱体内部的三维坐标系。位于定义的3d圆柱体内的位置
“pos2”是一个不在圆柱内的3d坐标。
但是,在下面运行我的代码时,它会确定两者都在圆柱体之外。我的“ContainsVector”函数后面的数学有什么问题吗?
可读性原因,这里是hastebin相同的代码:http://hastebin.com/giquwomuko.lua
Vector3 = {
new = function(x0, y0, z0)
return {x = x0, y = y0, z = z0}
end
}
CylinderRegion = {
New = function(self, center, height, r)
return {
Center = center;
Bottom = center.y - height/2;
Top = center.y + height/2;
Radius = r;
Height = height;
Volume = math.pi * r^2 * height;
PrintProperties = function(self)
for prop, val in pairs(self) do
if type(val) == "number" then
print("Cylinder "..prop..": "..tostring(val))
elseif type(val) == "table" then
print("Cylinder "..prop..": "..tostring(val.x..", "..val.y..", "..val.z))
end
end
print("\n")
end;
ContainsVector = function(self, vector)
--vector is between top and bottom
if vector.y < self.Top and vector.y > self.Bottom then
local x0 = self.Center.x
local z0 = self.Center.z
local r = self.Radius
local x1 = vector.x
local z1 = vector.z
local cont = math.sqrt((x1-x0)*(x1-x0) + (z1-z0)*(z1-z0)) < r
return cont
end
return false
end
}
end;
}
function main()
local pos = Vector3.new(-2.5, 7.5, -80.7)
local pos2 = Vector3.new(9.3, 2.5, -60.5)
local region = CylinderRegion:New(Vector3.new(13.9, 14.2, 16.7), 28.4, 61)
print("Created new cylinder with the following properties:\n")
region:PrintProperties()
local ex = region:ContainsVector(pos)
local ex2 = region:ContainsVector(pos2)
if ex then
print("pos ("..tostring(pos.x..", "..pos.y..", "..pos.z)..") is inside the cylinder!")
else
print("pos ("..tostring(pos.x..", "..pos.y..", "..pos.z)..") is NOT inside the cylinder!")
end
if ex2 then
print("pos2 ("..tostring(pos2.x..", "..pos2.y..", "..pos2.z)..") is inside the cylinder!")
else
print("pos2 ("..tostring(pos2.x..", "..pos2.y..", "..pos2.z)..") is NOT inside the cylinder!")
end
end
local s, e = pcall(main)
if not s then
print(e)
end
io.read()
阅读[this](https://stackoverflow.com/help/mcve)。 – philipxy 2015-02-07 05:07:56
我把问题缩小到了8行,在我的问题中,我只是添加了整个表,以便阅读和理解 – Elmub 2015-02-07 05:22:40
了解。但是你应该给予输入和期望的输出和输出,包括中间值。此外,问题可能不在你认为的地方。 – philipxy 2015-02-07 05:47:50