在csv文件中编写xyz坐标

时间:2018-05-01 13:17:45

标签: python csv

我正在尝试在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)。我怎么能这样做?

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]]代替。