作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个平面和一条正弦曲线。请问如何旋转这两个对象?我的意思是让平面在 -0.1 到 0.4 的区间内缓慢倾斜,以便例如在 0.4 点垂直于 z?经过较长时间的旋转,平面和正弦的最大值和最小值将构建“圆柱的表面,轴从点[0,-0.1,0]到点[0,0.4,0]”。我希望我的意思很清楚。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d import proj3d
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
plane1 = -0.1
plane2 = 0.4
h = 0.03
# Plane
xp = np.array([[0, 0], [0, 0]])
yp = np.array([[plane1, plane2], [plane1, plane2]])
zp = np.array([[-h, -h], [h, h]])
ax.plot_surface(xp, yp, zp, alpha=0.4, color = 'red')
# Sine
f = 100
amp = h
y = np.linspace(plane1, plane2, 5000)
z = amp*np.sin(y*f)
ax.plot(y, z, zdir='x')
plt.show()
最佳答案
要回答标题问题,要创建螺旋,您正在寻找 a simple 3D function :
amp, f = 1, 1
low, high = 0, math.pi*20
n = 1000
y = np.linspace(low, high, n)
x = amp*np.cos(f*y)
z = amp*np.sin(f*y)
ax.plot(x,y,z)
这给出:
rotate_about_y = np.array([
[cos(theta), 0, sin(theta), 0],
[0, 1, , 0],
[-sin(theta), 0, cos(theta), 0],
[0, 0, 0, 1],
])
然后,要将其应用于整个点列表,您可以执行以下操作:
# Just using a mathematical function to generate the points for illustation
low, high = 0, math.pi*16
n = 1000
y = np.linspace(low, high, n)
x = np.zeros_like(y)
z = np.cos(y)
xyz = np.stack([x, y, z], axis=1) # shaped [n, 3]
min_rotation, max_rotation = 0, math.pi*16
homogeneous_points = np.concatenate([xyz, np.full([n, 1], 1)], axis=1) # shaped [n, 4]
rotation_angles = np.linspace(min_rotation, max_rotation, n)
rotate_about_y = np.zeros([n, 4, 4])
rotate_about_y[:, 0, 0] = np.cos(rotation_angles)
rotate_about_y[:, 0, 2] = np.sin(rotation_angles)
rotate_about_y[:, 1, 1] = 1
rotate_about_y[:, 2, 0] = -np.sin(rotation_angles)
rotate_about_y[:, 2, 2] = np.cos(rotation_angles)
rotate_about_y[:, 3, 3] = 1
# This broadcasts matrix multiplication over the whole homogeneous_points array
rotated_points = (homogeneous_points[:, None] @ rotate_about_y).squeeze(1)
# Remove tacked on 1
new_points = rotated_points[:, :3]
ax.plot(x, y, z)
ax.plot(new_points[:, 0], new_points[:, 1], new_points[:, 2])
对于这种情况(其中
low == min_rotation
和
high == max_rotation
),你会得到一个螺旋状结构,但是,正如我所说,它被我们绕 y 轴旋转的事实扭曲了,函数去 y=0 .
@
numpy 中的符号表示“矩阵乘法”。 “同质点”就是最后加1的点;我不会深入探讨为什么他们会成功,但他们确实做到了。
关于python - 用两个物体做螺旋,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64686981/
我正在尝试创建一个结构,如下面的屏幕截图所示。有没有办法在 JavaScript 中为此构建一个算法,以按时间顺序获取每个红点的 X 和 Y 坐标,以根据特定数量生成无限螺旋? Screenshot
我在 C++ 中有如下代码: for(int x = position.x; x GetValue(tc); } } 它的作用是生成一个梯度噪声值容器。在这样做的同时,它还会使结果围绕震中螺旋
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我是一名优秀的程序员,十分优秀!