Python 将给定坐标(x,y,z)缠绕在扭曲结构中

Python 将给定坐标(x,y,z)缠绕在扭曲结构中,python,python-3.x,csv,numpy,mobius,Python,Python 3.x,Csv,Numpy,Mobius,我试图将(x,y,z)坐标缠绕在a上(一种通过扭曲一次并连接条带两端而获得的拓扑结构) 使用以下代码,结构(我可以为其创建xyz坐标)如下所示 import numpy as np import matplotlib.pyplot as plt bLength=1.6 numPoints=10 radius = bLength*numPoints / (2 * np.pi) theta = np.linspace(0,2*np.pi,numPoints,endpoint=False) dthe

我试图将(x,y,z)坐标缠绕在a上(一种通过扭曲一次并连接条带两端而获得的拓扑结构)

使用以下代码,结构(我可以为其创建xyz坐标)如下所示

import numpy as np
import matplotlib.pyplot as plt

bLength=1.6
numPoints=10
radius = bLength*numPoints / (2 * np.pi)
theta = np.linspace(0,2*np.pi,numPoints,endpoint=False)
dtheta=theta[1]-theta[0]
x0,y0=(radius * np.cos(theta)), (radius * np.sin(theta))
x1,y1=(radius * np.cos(theta+dtheta/2)) , (radius * 
np.sin(theta+dtheta/2))
#plt.plot(x0,y0)
#plt.show()
#plt.plot(x1,y1)
#plt.show()
cons0=np.ones(x0.shape)*0
cons1=np.ones(x1.shape)*2
np.savetxt('cooRing1.csv',np.c_[x0,y0,cons0],delimiter=' ')
np.savetxt('cooRing2.csv',np.c_[x1,y1,cons1],delimiter=' ')
cat cooRing1.csv cooRing2.csv > coordinates.csv
[![在此处输入图像描述][3][3]

我想在莫比乌斯带上绘制xyz坐标图

下面的例子已经在一个网站上给出了一个不同的条带(代码也使用了一个不公开的模块)


Python中是否有类似的模块,以便我可以构建所需的结构并创建xyz坐标?或者如何进一步完成代码?

无法将一个2xN环的坐标转换为Möbius带。这是因为一个半扭曲的交替带必须有奇数个原子,而你的电流环总是有偶数。你需要去掉一个原子或者加上一个原子,这样才能使扭曲起作用。也许你可以通过将第一个和最后一个原子叠加在一起来进行转换,但我认为这会非常难看(无论是在数学上还是在情节上)

虽然这可能会使3D变换的要求变得不切实际,但您可以使用所需的扭曲从头开始创建坐标。只需为条带的单条边生成一个点数组(只有一条边是使Möbius条带奇怪的原因之一)。边缘围绕圆形成两个循环,一个在带的每一侧,扭曲以主旋转速度的一半发生

以下是我的尝试:

bLength=1.6
n = 10
numPoints = 2*n + 1
radius = bLength*numPoints / (4*np.pi)   # 4*pi because the edge goes around the circle twice
theta = np.linspace(0, 4*np.pi, numPoints, endpoint=False)   # here too
x = (radius + np.cos(theta/2)) * np.cos(theta)
y = (radius + np.cos(theta/2)) * np.sin(theta)
z = np.sin(theta/2)

plt.plot(x, y) # I don't know how to graph in 3d, so only x and y here
plt.show()

这使得条带的宽度为2,就像您当前的代码一样。如果宽度不正确,则应将计算
x
y
时添加到半径的
cos
项和用于
z
sin
值乘以所需宽度的一半


请注意,虽然这段代码可能会产生您想要的结果,但在物理上描述实际的原子环时,坐标可能是毫无意义的。坐标之间的一些距离将与其他坐标之间的距离非常不同(例如,当板条几乎平坦时,板条内部与外部之间的距离),并且由原子制成的真正的Möbius板条(如果可以制造出这样的物体)可能会以某种方式折叠,而不是以统一的速率扭曲(纸做的Möbius带也不会这样扭曲)。准确地找到真实原子的排列方式将是一个更加困难的问题(对于物理学家来说,这是一个问题,而不是程序员)。

这个问题似乎太模糊了。你的Mobius带看起来像什么?你如何表示它的坐标(抽象坐标或三维空间坐标)?到目前为止,你写了什么代码?你已经标记了问题
csv
,你有坐标数据文件还是什么?你需要解释更多才能在这里得到答案。@Blckknght是的。我已经添加了从中获得xyz坐标的代码(另存为coordinates.csv)感谢Blckknght的代码和很好的解释。我知道最终坐标将被转换,它不再是一个实际的原子环。即使我得到了粗略的几何图形,这也会很有帮助。在这里,我从一个网站上找到了另一个代码。此外,他们使用代码生成了以下几何图形,但是,有些结构是一般的请看这个链接:我对转换不可能的评论是针对均匀宽度的条带,因为它们在相反的边上是不同的(它们交替)。任何在对边上相同的东西都可以添加扭曲,尽管在创建了没有扭曲的几何体之后这样做可能比在前面创建扭曲的几何体更尴尬。基本上,我想要的是,我想要一组XYZ坐标转换成类似Mobius的结构。可能是我的问题这一点尚不清楚。但是,这是可以做到的,人们也在这样做。
bLength=1.6
n = 10
numPoints = 2*n + 1
radius = bLength*numPoints / (4*np.pi)   # 4*pi because the edge goes around the circle twice
theta = np.linspace(0, 4*np.pi, numPoints, endpoint=False)   # here too
x = (radius + np.cos(theta/2)) * np.cos(theta)
y = (radius + np.cos(theta/2)) * np.sin(theta)
z = np.sin(theta/2)

plt.plot(x, y) # I don't know how to graph in 3d, so only x and y here
plt.show()