首页 > 解决方案 > 给定一个向量和两者之间的角度,找到第二个 n 维向量

问题描述

有两个 n 维向量xz使得 ||xz||=v。我需要扰动xy使得 ||zy||=r < v (即,y与z相比更接近x)。必须随机选择方向(不能直接朝向z扰动)。

图表

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 3])
z = np.array([3, 1.5])

# get the vector from x to z
direction = z - x

# calculate v (distance between x and z)
v = np.linalg.norm(z - x)

# select angle randomly
angle = np.random.uniform(-np.pi / 2, np.pi / 2, 1)
# TODO: this pertrubs y directly towards z
y_direction = np.cos(angle) * direction

perturbation = 0.1
y = x + perturbation * y_direction
# calculate r (distance between x and z)
r = np.linalg.norm(y - z)

print(v)
print(r)

origin = np.array([[0, 0, 0], [0, 0, 0]])  # origin point

plt.quiver(*origin, x[0], x[1], color='r', scale=21, label='x')
plt.quiver(*origin, z[0], z[1], color='b', scale=21, label='z')
plt.quiver(*origin, y[0], y[1], color='g', scale=21, label='y')
# plt.xlim(-2, 1)
# plt.ylim(0, 3.5)
plt.show(

标签: pythonnumpyvector

解决方案


推荐阅读