Я пытаюсь записать координаты (координаты xyz) двойного круга в файл csv.
Я написал следующий код.
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). Однако я хотел бы записать координаты (xyz) этих кругов (двойной круг) в «файл csv».
Синтаксис может быть следующим. Однако я не могу двигаться дальше.
with open('data.csv', 'w') as f:
csv.writer(f, delimiter=' ').writerows(f)
Окончательный результат должен содержать три столбца. Первые два вида csv будут взяты из вышеупомянутого цикла for. Третий столбец файла csv должен быть некоторой константой (скажем, 0 или 2,1). Как я могу это сделать?
Вы можете использовать массив numpy для упрощения кода. Если известен радиус: t = np.arange(0, 2*np.pi, granularity)
x,y = radius*np.cos(t), radius*np.sin(t)
Подскажите, почему у вас две петли? Внешний цикл создает круг, а внутренний цикл создает один дополнительный круг для каждого угла внешнего цикла! Тем не менее, вы упомянули, что рисуете «круг». Вы хотите один кружок или несколько?
@ anishtain4 Мне нужны координаты кругов буксировки, разделенных на небольшом расстоянии. Второй цикл предназначен для создания второго круга (на небольшом расстоянии от первого круга).
@phenomenon Нет, все в одном круге.
Немного почистив математику и питон, это должно сработать:
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]]
.
Спасибо за четкий код. Это дает только половину координат. Модель двойного кольца, для которой мне нужны координаты xyz, доступна здесь, на рисунках (a) и (c): researchgate.net/figure/….
@phenomenon: записывает координаты круга «а» и константы, как вы упомянули в своем вопросе. Вы хотите оба круга? просто поменяйте массив в savetxt
на out_array=np.r_[np.c_[x0,y0,cons0],np.c_[x1,y1,cons1]
. Изменить код в зависимости от того, что вы хотите, должно быть легко.
добавить в список, затем
np.array(list)
, затем использоватьnp.savetxt
для записи массива