График показывает линию только при соединении 1000 точек окружности

#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. Хорошо, самый важный момент-инициализировать списки точек до начала цикла, как уже указывалось в комментариях выше.