#python #matplotlib
Вопрос:
У меня есть код, который вычисляет определенное количество точек на окружности круга, и когда он запускается с matplotlib, он отображает только линию.
Вот текущий код:
import math
import matplotlib.pyplot as plt
h = float(input("Enter H value (center-x): "))
k = float(input("Enter K value (center-y): "))
r = float(input("Enter your R value (radius): "))
point_count = float(input("How many points do you want: "))
x_min = float(h - r)
x_max = float(h r)
CENTER_POINT = (h, k)
CENTER_X = CENTER_POINT[0]
CENTER_Y = CENTER_POINT[1]
# Side 1
side = int(point_count / 2 1)
for i in range(0, side):
r_count = 1
increment_segment = float(r * r_count / side)
r_count = 1
x_min = increment_segment
if x_min >= x_max:
x_min -= increment_segment
pass
y_formula_positive = math.sqrt(math.pow(r, 2) - math.pow(x_min - h, 2)) k
y_formula_negative = 0 - math.sqrt(math.pow(r, 2) - math.pow(x_min - h, 2)) k
print(x_min, y_formula_positive)
print(x_min, y_formula_negative)
x_coor = []
y_coor = []
x_coor.append(x_min)
x_coor.append(x_min)
y_coor.append(y_formula_positive)
y_coor.append(y_formula_negative)
print(i)
plt.plot(x_coor, y_coor)
plt.show()
Я считаю, что расчеты для точек верны, и что проблема заключается в том, чтобы построить их с помощью matplotlib.
Спасибо за любую помощь.
Комментарии:
1. Вы пробовали строить точки с
plt.scatter
помощью ?2. Поскольку мы инициализируем список в процессе цикла, пожалуйста, держите его вне цикла.
x_coor=[];y_coor=[]
3. Есть несколько проблем с вашими расчетами. вы можете начать с наблюдения за точками в
x_coor
иy_coor
. Вы перезаписываете их пустым массивом на каждой итерации цикла и каждый раз вычисляете в основном одну и ту же точку. Кроме того, я не знаю, является ли это просто личным делом, или это на самом деле часть PEP-8, но я бы избегал импорта модуля внутри цикла. Я думаю, что это плохая практика.4. Спасибо за вашу помощь! Я только что заметил, что я устанавливаю его как новый массив каждый раз в цикле for. Спасибо!
Ответ №1:
Вы можете упростить свой код с помощью небольшого количества тригонометрии:
import math
import matplotlib.pyplot as plt
h = float(input("Enter H value (center-x): "))
k = float(input("Enter K value (center-y): "))
r = float(input("Enter your R value (radius): "))
point_count = int(input("How many points do you want: "))
points_x = []
points_y = []
for i in range(point_count):
angle = 2 * math.pi * i / point_count
points_x.append(h r * math.cos(angle))
points_y.append(k r * math.sin(angle))
plt.scatter(points_x, points_y)
plt.gca().set_aspect('equal')
plt.show()
Комментарии:
1. Привет, спасибо за вашу помощь, но есть математические концепции, которые я еще не понимаю.
2. Хорошо, самый важный момент-инициализировать списки точек до начала цикла, как уже указывалось в комментариях выше.