python - 找出两个 3D 向量的所有正负组合之间的角度
问题描述
在计算两个 3D 角度之间的角度的这个问题之后,我想以一种计算所有可能的正负组合角度的方式来扩展它。
例如,我从计算 (1,1,5) 和 (-1,1,2) 之间的角度的同一链接中获得以下代码:
import numpy as np
import vg
vec1 = np.array([1, 1, 5])
vec2 = np.array([-1, 1, 2])
angle= vg.angle(vec1, vec2)
print(angle)
现在我想要一个小函数来计算每个向量的所有可能的正负组合并给出所有角度的列表。
例如,它计算以下对:(1,1,5)(-1,1,2), (1,1,-5)(-1,1,2), (1,-1,-5) (-1,1,2) 等。这似乎很容易,但我想不通。
附带问题:我如何要求input()
函数获取向量?我知道它是如何处理字符串和数字的,但你能要求它以特殊格式从用户那里获取输入数据吗?像(1,2,3)?
解决方案
vec_comb[:,:3]
具有 的所有组合vec1
,并且vec_comb[:,3:]
具有 的所有组合vec2
import numpy as np
import vg
import itertools
vec1 = np.array([1, 1, 5])
vec2 = np.array([-1, 1, 2])
vec_concat = np.hstack((vec1, vec2))
l = [1,-1]
comb = np.array(list(itertools.product(l, repeat=vec_concat.shape[0])))
vec_comb = np.einsum('i, ji -> ji', vec_concat, comb)
angle_comb = vg.angle(vec_comb[:,:3], vec_comb[:, 3:])
print(angle_comb)
输出:
[ 38.2169233 141.7830767 51.05755873 160.52877937 19.47122063
128.94244127 38.2169233 141.7830767 141.7830767 38.2169233
160.52877937 51.05755873 128.94244127 19.47122063 141.7830767
38.2169233 51.05755873 160.52877937 38.2169233 141.7830767
38.2169233 141.7830767 19.47122063 128.94244127 160.52877937
51.05755873 141.7830767 38.2169233 141.7830767 38.2169233
128.94244127 19.47122063 19.47122063 128.94244127 38.2169233
141.7830767 38.2169233 141.7830767 51.05755873 160.52877937
128.94244127 19.47122063 141.7830767 38.2169233 141.7830767
38.2169233 160.52877937 51.05755873 38.2169233 141.7830767
19.47122063 128.94244127 51.05755873 160.52877937 38.2169233
141.7830767 141.7830767 38.2169233 128.94244127 19.47122063
160.52877937 51.05755873 141.7830767 38.2169233 ]
推荐阅读
- jquery - 制表器插件未加载
- debugging - KDevelop 不会开始调试
- jsf - PrimeFaces 菜单栏图像
- c# - 用于 confluent-kafka-dotnet 的 Docker 容器内的 Confluent 监控拦截器
- c# - 根据值决定创建哪个派生类?
- python - Insert new element as the head of the Linkedlist Python
- jenkins - 如何通过詹金斯在远程机器上运行命令
- java - 致命例外:android studio 中的主要错误
- sql - 将 SQL 表名作为参数传递
- python - 使用 Python 测试 AWS lambda