swift - 如何在 Swift 中创建带有起点和终点的线条(ARKit、SCENEKit)

标签 swift vector line arkit

我想创建一条线,我可以告诉它在 ARKit 的场景中从哪里开始和从哪里结束。其他人制作了这门课,但我遇到了错误。像节点处的 startLine 和节点处的 endLine 这样简单的东西会很有帮助。我觉得在两点之间做一条简单的线不应该那么复杂,所以如果你的答案很复杂,请解释为什么必须如此。感谢大家的帮助!

class LineNode: SCNNode {

private(set) var cylinder: SCNCylinder
private(set) var positionA: SCNVector3
private(set) var positionB: SCNVector3

init(with startingPoint: SCNVector3, endPoint: SCNVector3, radius: Float = 0.02, color: UIColor = .red) {
    self.positionA = startingPoint
    self.positionB = endPoint
    let vector = endPoint - startingPoint  *//error*
    let height = vector.length()
    cylinder = SCNCylinder(radius: radius, height: Float(height))
    cylinder.radialSegmentCount = 8
    cylinder.firstMaterial?.diffuse.contents = color
    super.init()
    geometry = cylinder
    position = (endPoint + startingPoint) / 2   *//error*
    eulerAngles = SCNVector3.lineEulerAngles(vector: vector)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }
}

//我收到错误:二元运算符“-”无法应用于两个“SCNVector3”操作数

最佳答案

如果您想在向量上使用“+/-”,则需要编写扩展。只需将其粘贴到类定义下即可。

class ... {
 // class code
}
func + (left: SCNVector3, right: SCNVector3) -> SCNVector3 {
    return SCNVector3Make(left.x + right.x, left.y + right.y, left.z + right.z)
}

func - (left: SCNVector3, right: SCNVector3) -> SCNVector3 {
    return SCNVector3Make(left.x - right.x, left.y - right.y, left.z - right.z)
}

将其发布在类括号下方

关于swift - 如何在 Swift 中创建带有起点和终点的线条(ARKit、SCENEKit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55670546/

相关文章:

ios - UITableView 在使用 Swift 中的 Master Detail App 滚动之前不会重新加载

c++ - 两个不等大小的 vector 是否存在 std::mismatch?

opencv - 在 OpenCV 中写入向量

java - 创建 Java Apache POI 折线图,其中日期显示在水平 X 轴上

r - 用r的ggplot2中的线连接点

c++ - 从二进制文件读取并存储到缓冲区

swift - 访问 Controller View 中的复选框 (NSButton)

ios - 如何删除 Swift 闭包中设置的通知观察者?

macos - 从应用程序重新启动 Dock

c++ - 给定 2 个点和从第一个点到我必须找到的点的范围。如何找到我必须找到的点(在3D空间上)