sprite-kit - 如何使用 SpriteKit 在圆上通过给定偏移创建点?
问题描述
我想在一个圆上创建 X 个 30 度的点。像这样的东西:
我现在的代码如下所示:
func pointsOnCircle(num: Int, radius:Float, center:CGPoint) {
let _by = 360/num
for i in stride(from: 0, to: 360, by: _by) {
print("Stride: \(i)")
let x = radius * cos(Float(i))
let y = radius * sin(Float(i))
let pos = CGPoint(x: CGFloat(x)+center.x, y: CGFloat(y)+center.y)
var node: SKSpriteNode!
if(i == 0){
node = SKSpriteNode(color: SKColor.blue, size: CGSize(width: 10, height: 10))
} else if (i == 90){
node = SKSpriteNode(color: SKColor.orange, size: CGSize(width: 10, height: 10))
} else if (i == 180){
node = SKSpriteNode(color: SKColor.purple, size: CGSize(width: 10, height: 10))
} else {
node = SKSpriteNode(color: SKColor.red, size: CGSize(width: 10, height: 10))
}
node.alpha = 0.5
node.position = pos
node.zPosition = 20
self.addChild(node)
}
}
由于 360 除以 12 是 30.. 我这样调用函数:
pointsOnCircle(num: 12, radius: 100, center: CGPoint(x: frame.midX, y: frame.midY))
我没有得到我期望的结果,如下图所示:
蓝色矩形是 0 度,这是正确的
紫色矩形是 180 度,这是不正确的
橙色矩形是 90 度,这也是不正确的。
解决方案
将度数转换为弧度的辅助函数
Knight0fDragon 编辑 - 来源:如何将度数转换为弧度? 感谢@LeoDabus 提供了一个精彩的扩展。
extension BinaryInteger {
var degreesToRadians: CGFloat { return CGFloat(self) * .pi / 180 }
}
extension FloatingPoint {
var degreesToRadians: Self { return self * .pi / 180 }
var radiansToDegrees: Self { return self * 180 / .pi }
}
结果
45.degreesToRadians // 0.785398163397448
Int(45).degreesToRadians // 0.785398163397448
Int8(45).degreesToRadians // 0.785398163397448
Int16(45).degreesToRadians // 0.785398163397448
Int32(45).degreesToRadians // 0.785398163397448
Int64(45).degreesToRadians // 0.785398163397448
UInt(45).degreesToRadians // 0.785398163397448
UInt8(45).degreesToRadians // 0.785398163397448
UInt16(45).degreesToRadians // 0.785398163397448
UInt32(45).degreesToRadians // 0.785398163397448
UInt64(45).degreesToRadians // 0.785398163397448
Double(45).degreesToRadians // 0.7853981633974483
CGFloat(45).degreesToRadians // 0.785398163397448
Float(45).degreesToRadians // 0.7853981
Float80(45).degreesToRadians // 0.785398163397448278999
推荐阅读
- ios - iOS模拟器崩溃
- elasticsearch - 在弹性搜索索引中查找所有单词及其频率
- html - ReactJS - How To Setup 3 Divs One On-Top Of The Other?
- javascript - node.js 中的 setInterval 是否在计算机入睡时开始运行?
- python - python中最大的日期时间是多少?
- python - 使用上下文管理器选择数据库或文件处理程序
- java - 连续打开 2 个甜蜜警报对话框时应用程序冻结
- html - 取消隐藏存档网页上的列
- java - 异常:从线程“main”中的 UncaughtExceptionHandler 抛出 java.awt.HeadlessException
- reactjs - 在 React 中,是否有一种优雅的方式可以在 RESTful 编辑 url 中使用 id 并将相应的对象加载到我的组件的初始状态中?