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