Приведенный ниже код генерирует набор случайных координат x, y и использует уравнение эллипса, чтобы сравнить, сколько из этих точек находится внутри эллипса с центром в (1,1) и прямоугольника области 2a * 2b, построенного вокруг эллипсау которых большая и большая полуось являются осями a и b, но b является переменной и принимает значение из списка b каждый раз.Я хочу иметь все значения b, для которых отношение всех точек, лежащих внутри эллипса, к точкам, лежащим внутри прямоугольника, больше 0,5.
Проблема, с которой я сталкиваюсь, заключается в том, что если я проверяюодно значение b = 0,63.условие ellipse_points / rectangle_points приблизительно равно 0,5, но когда я повторяю цикл по списку b и использую инструкцию If, чтобы получить все точки, для которых ellipse_points / rectangle_points> 0,5, я не вижу значений, близких к 0,63, вместо этого я вижу значения изОт 1.2 до 1.9, я не понимаю, почему, когда я перебираю список значений для b, оператор if, кажется, дает ошибочные значения.пожалуйста, обратитесь к следующему набору кода, где я устанавливаю значение b = 0,63 и нахожу соотношение ellipse_points / rectangle_points
import numpy as np
x = np.random.uniform(0, 2, 10000) #generates random x coordinates
y = np.random.uniform(0, 2, 10000) #generates random y coordinates
ellipse_points, rectangle_points = 0, 0
a = 1
b = []
for i in range(1, 200):
b.append(i/100)
#print(b)
for p in b:
for i, j in zip(x, y):
if (((i - 1) ** 2) / a ** 2 + ((j - 1) ** 2) / p ** 2) < 1:
ellipse_points += 1
rectangle_points += 1
if ellipse_points/rectangle_point > 0.5:
print(p)
ВЫХОД: 1.2, 1.21 ............. 1.9
#
x = np.random.uniform(0, 2, 10000) #generates random x coordinates
y = np.random.uniform(0, 2, 10000) #generates random y coordinates
ellipse_points, rectangle_points = 0, 0
a = 1
b = 0.63
for i, j in zip(x, y):
if (((i - 1) ** 2) / a ** 2 + ((j - 1) ** 2) / b ** 2) < 1:
ellipse_points += 1
rectangle_points += 1
print(ellipse_points/rectangle_points)
ВЫХОД 0.5001