python - 给定一个向量和两者之间的角度,找到第二个 n 维向量
问题描述
有两个 n 维向量x和z使得 ||xz||=v。我需要扰动x到y使得 ||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(
解决方案
推荐阅读
- c# - 当尝试使用 Task.Run() 在 MySql 中运行插入查询时,它会抛出以下异常:“无法连接到任何指定的 MySQL 主机。”
- listview - 当列表视图项目增加时,列表视图页脚修复在屏幕底部
- regex - Javacc - 通过使用左分解而不是前瞻来消除选择冲突
- c++ - 在 C++ 中不使用 char 类型定义 '999e999' 值
- python - 我的 for 循环没有根据条件删除数组中的项目?Python
- c# - 模拟 Azure MobileServiceClient
- python - pandas:根据具有重复值的另一列填充 nan 值
- html - CSS 是否关心过 DOM 的“亲密”关系?
- arrays - 如何找到变化数组的最大值移动的方向?
- node.js - 尝试将 kafka-node 与 angular6 一起使用会出现 zlib_bindings not found 问题