gpt4 book ai didi

swift - SceneKit euler 在旋转期间角度奇怪的值

转载 作者:搜寻专家 更新时间:2023-10-31 08:33:28 26 4
gpt4 key购买 nike

我正在使用以下行旋转 SCNNode:

 let rotate = SCNAction.rotateByAngle(CGFloat(M_PI), aroundAxis:SCNVector3Make(0, 1, 0), duration: NSTimeInterval(10.0))
let repeat = SCNAction.repeatActionForever(rotate)
node.runAction(repeat)

然后我在渲染方法中打印节点的 eulerAngles.y:

let rad = Double(node.eulerAngles.y)        
var angleInDegrees = fmodf(360.0 + -Float(rad) * (180.0 / Float(M_PI)), 360.0)
println("eulerAngles.y rad:\(rad) degree:\(angleInDegrees)")

但是我在旋转过程中得到了如下奇怪的值:

...
eulerAngles.y rad:-1.38788688182831 degree:79.5201
eulerAngles.y rad:-1.40567290782928 degree:80.5391
eulerAngles.y rad:-1.4227991104126 degree:81.5204
eulerAngles.y rad:-1.44030773639679 degree:82.5236
eulerAngles.y rad:-1.45790004730225 degree:83.5315
eulerAngles.y rad:-1.47438871860504 degree:84.4763
eulerAngles.y rad:-1.49130213260651 degree:85.4453
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:-1.49359321594238 degree:85.5766
eulerAngles.y rad:-1.47716772556305 degree:84.6355
...

我不明白为什么要打印 270。你能解释一下吗?或者有其他方式得到正确的节点角度?

最佳答案

这就是欧拉角的工作原理。他们有两个怪癖(我将 xyz 称为 pitch偏航,和roll分别):

  • rollyaw随着逆时针旋转从0增加到π(180度)然后跳到-π(-180度)继续增加当旋转完成一个圆圈时为 0;但是 pitch 增加到 π/2(90 度)然后减小到 0,然后减小到 -π/2(-90 度)然后增加到 0。

  • 某些方向的值变得不准确。特别是,当 pitch 为 ±90 度时,rollyaw 变得不稳定。查看wikipedia article on gimbal lock .

关于swift - SceneKit euler 在旋转期间角度奇怪的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32126632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com