【发布时间】:2015-07-23 06:51:20
【问题描述】:
给定 2 个 3D 点 (a,b) 和一个 SCNCapsule、SCNTorus、SCNTube 等, 如何定位对象,使对象从 a 点开始并在 b 点结束?
Swift 或 Objective-C 中的代码示例将不胜感激。
从 Moustachs 的回答中,我设法做了一个二维解决方案:
var v1 = SCNVector3(x: Float(a.x), y: Float(a.y), z: 0.0)
var v2 = SCNVector3(x: Float(b.x), y: Float(b.y), z: 0.0)
let height = CGFloat(v1.distance(v2))
var capsule = SCNCapsule(capRadius: 0.1, height: height)
var node = SCNNode(geometry: capsule)
var midpoint = (v1 + v2) / 2.0
node.position = midpoint
var rotp = v2 - midpoint
let rotx = atan2( rotp.y, rotp.x )
node.eulerAngles = SCNVector3Make(0.0, 0.0, rotx)
self.addChildNode(node)
我知道,完整的 3D 旋转有无数种解决方案,但我不关心第三轴。尽管如此,似乎即使是第二个轴旋转也不适合我。也许我的数学让我望而却步。谁能告诉我如何将此代码提升到 3D 空间?
(我正在使用 Swift 和 Kim Pedersens SCNVector3Extensions:https://github.com/devindazzle/SCNVector3Extensions)
【问题讨论】: