我正在尝试在csv文件中编写双圆的坐标(xyz坐标)。
我现在写了以下代码。
import numpy as np
import matplotlib.pyplot as plt
import csv
bLength=2.10e-10
numPoints=10
totalLength = bLength * numPoints
Circumference = totalLength
radius = Circumference / (2 * np.pi)
totalAngle=360.0
angle = 360.0/numPoints
# define a function frange to include fraction
def frange(start, stop, step):
i = start
while i < stop:
yield i
i += step
# getting the x, y co-ordinates of the two circles displaced by angle/2)
for i in frange(0.0, 360.0, angle):
plt.plot(radius * np.cos(i), radius * np.sin(i), 'bo')
for j in frange(angle/2, 360.0, angle):
plt.plot(radius * np.cos(j), radius * np.sin(j), 'bo')
plt.show()
在这里,我在图表中得到一个圆圈(在Jupyter Notebook中)。但是,我想在&#34; csv文件&#34;中写下这些圆圈的坐标(xyz)(双圆圈)。
语法如下。但是,我无法继续下去。
with open('data.csv', 'w') as f:
csv.writer(f, delimiter=' ').writerows(f)
最终输出应包含三列。 csv的前两个coummns来自上面的&#34; for循环&#34;。 csv文件的第三个coloumn应该是一些常量(比如说0或2.1)。我怎么能这样做?
答案 0 :(得分:1)
稍微清理数学和python,这应该有效:
import numpy as np
import matplotlib.pyplot as plt
bLength=2.10e-10
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=np.cos(theta),np.sin(theta)
x1,y1=np.cos(theta+dtheta/2),np.sin(theta+dtheta/2)
plt.plot(x0,y0)
plt.plot(x1,y1)
cons=np.ones(x0.shape)*10
np.savetxt('circle.csv',np.c_[x0,y0,cons],delimiter=',')
在linspace
函数中,我使用了endpoint=False
来避免重复相同的值,但是在图中这使得它看起来不连续。您可以复制它,并在打包时写入使用np.c_[x0[:-1],y0[:-1],cons[:-1]]
代替。