gpt4 book ai didi

swift - 3D 中两条线之间的角度

转载 作者:行者123 更新时间:2023-12-02 17:15:08 25 4
gpt4 key购买 nike

我知道如何在 2D 中使用 atan2 获取 2 点之间的角度,但这在 3D 中如何工作?:可以说我有 3 个点 A、B、C(都是具有 x、y、z 坐标的 SCNVector3第一线端点 A 和 B第二线端点 B 和 C现在我想得到两条线之间的角度......(在 ios Swift 中)我阅读了一些关于点积和 acos 的内容,但不知何故它不起作用......

当 i=0 时:

        var vector1 = SCNVector3((pointArray[i].x - pointArray[i+1].x), (pointArray[i].y - pointArray[i+1].y), (pointArray[i].z - pointArray[i+1].z))
var vector2 = SCNVector3((pointArray[i+2].x - pointArray[i+1].x), (pointArray[i+2].y - pointArray[i+1].y), (pointArray[i+2].z - pointArray[i+1].z))
var dotProduct = vector1.x * vector2.x + vector1.y * vector2.y + vector1.z * vector2.z
var theta = acos(dotProduct)
var tmp_winkel = GLKMathRadiansToDegrees(theta)

最佳答案

dot product考虑向量的范数(幅度)。确保处理单位向量,或除以它们的范数的乘积。

import SceneKit
import simd

var vector1 = float3((pointArray[i].x - pointArray[i+1].x), (pointArray[i].y - pointArray[i+1].y), (pointArray[i].z - pointArray[i+1].z))
var vector2 = float3((pointArray[i+2].x - pointArray[i+1].x), (pointArray[i+2].y - pointArray[i+1].y), (pointArray[i+2].z - pointArray[i+1].z))
var dotProduct = dot(normalize(vector1), normalize(vector2))
var theta = acos(dotProduct)

var vector1 = float3((pointArray[i].x - pointArray[i+1].x), (pointArray[i].y - pointArray[i+1].y), (pointArray[i].z - pointArray[i+1].z))
var vector2 = float3((pointArray[i+2].x - pointArray[i+1].x), (pointArray[i+2].y - pointArray[i+1].y), (pointArray[i+2].z - pointArray[i+1].z))
var dotProduct = dot(vector1, vector2)
var theta = acos(dotProduct / (length(vector1) * length(vector2)))

关于swift - 3D 中两条线之间的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46790176/

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