Как добавить нормальный закон распределения в координаты точки принадлежащей заданным значениям массива
Имеется круг (синий) , описанный сферическими координатами (x1=rcos(theta),x2=rsin(theta)) с координатам центра (0;0) и радиусом R. На некоторой точке круга (координаты X1[n],X2[n]) имеется точка B (красный круг) с координатам центра соответствующими положению на круге X1[n],X2[n] (координаты точки B строго привязаны к массивам точек круга X1[0..N],X2[0..N]).
Как добавить ошибку в координаты точки B распределенной по нормальному закону распределения при этом чтобы точки всегда принадлежали кругу ? (см. функцию draw_point)
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import pylab
x0=0; y0 = 0; h=10
r = np.sqrt(2.0)
fig, ax = plt.subplots(1)
class PointA(object):
def __init__(self, x,y):
self.x = x; self.y = y
class PointB(object):
def __init__(self, x,y):
self.x = x; self.y = y;
class circle(object):
def __init__(self, r):
#self.x1 = x1; self.x2 = x2;
self.r = r;
def line(PointA, PointB, t):
m = PointB.x - PointA.x
n = PointB.y - PointA.y
point = [0,0]
point[0] = PointA.x + m*t
point[1] = PointA.y + n*t
return point
PointB1 = PointB(0,0)
circle1=circle(r)
theta = np.linspace(0, 2*np.pi, 100)
def draw_circle(r,ax):
x1 = x0+r*np.cos(theta)
x2 = y0+r*np.sin(theta)
ax.plot(x1, x2, color="b")
return(x1,x2)
draw_circle(r,ax)
x1, x2 = draw_circle(r,ax)
def draw_point(x, y, ax):
x_point = x1[0]+r/10*np.cos(theta)
y_point = x2[0]+r/10*np.sin(theta)
ax.plot(x_point, y_point, color="r")
draw_point(PointB1.x, PointB1.y, ax)
ax.set_aspect(1)
plt.grid(linestyle='--')
plt.xlim(-2,20)
plt.ylim(-2,2)
plt.show()
Ответы (1 шт):
Да уж высочайшее неумение внятно сформулировать вопрос - отличительная черта вопросов последнего (карантинного) времени. Видать многим школьникам делать нечего - кинулись изучать Python. По видеоурокам. К тому-же дивно написанная программка, когда в функцию
draw_point(x, y, ax)
передаются параметры, которые вообще внутри функции не задействованы. В общем, одни слезы.
Предположу (!!!), что вам требуется примерно вот такой результат
По крайней мере - "точки всегда принадлежали кругу" (на самом деле, конечно, окружности), а координаты (на самом деле - угол тета) - распределены по нормальному закону. Достигнуть этого можно примерно вот так:
def draw_point1(ax):
a=theta[0]+random.normalvariate(0,0.25)
x_point = x0+r*math.cos(a)
y_point = y0+r*math.sin(a)
ax.scatter(x_point, y_point, color="r")
for i in range(30):
draw_point1(ax)
А уж под свою задачу - донастраивайте сами.

