#pointsXYcircleNormal.py #standard Normal distribution of randomly generate (x,y) integer points around origin, # mu=0 distance sigma=1 #Average distance of a point to the origin: ~.79 MAD sqrt(2/pi) import random import math def distance_pair_points(x1,y1, x2,y2): return math.sqrt((x2-x1)**2+(y2-y1)**2) num_points = int(input("Enter the number of normal random points: ")) X = [] #x-coordinates Y = [] #y-coordinates for p in range(num_points): alpha = random.random()*2*math.pi #random angle in radians dist = random.normalvariate(0,1) x = dist*math.cos(alpha) y = dist*math.sin(alpha) X.append(x) Y.append(y) #print("("+str(X[p])+","+str(Y[p])+")", end=" ") print() #print(X) #print(Y) distances = [] #distance each point to origin less1 = more1_less2 = more2_less3 = more3 = 0 for p in range(num_points): distances.append(distance_pair_points(X[p],Y[p], 0,0)) if distances[p] <= 3: if distances[p] <= 2: if distances[p] <= 1: less1 += 1 else: more1_less2 += 1 else: more2_less3 += 1 else: more3 += 1 print("Sum of distances to origin:", sum(distances)) print("Average distance to origin:", sum(distances)/num_points) print("number within 1 sigma:",less1," %",less1/num_points) print("number between 1 and 2 sigma:",more1_less2," %",more1_less2/num_points) print("number between 2 and 3 sigma:",more2_less3," %",more2_less3/num_points) print("number more than 3 sigma:",more3," %",more3/num_points) dist_pt_pt = [[0 for j in range(num_points)] for i in range(num_points) ] for i in range(num_points): for j in range(num_points): #could be more eff., do only half... dist_pt_pt[i][j] = distance_pair_points(X[i],Y[i], X[j],Y[j]) #i_avg_dist = sum(dist_pt_pt[i])/(num_points-1) #print("i",i,"avg. dist:",i_avg_dist) #not itself total_distances = 0 for i in range(num_points): total_distances += sum(dist_pt_pt[i]) print("Average distance between points:",total_distances/(num_points*(num_points-1))) from ezgraphics import GraphicsWindow size = int(input("Enter square size of graphics window: ")) win = GraphicsWindow(size,size) canvas = win.canvas() #margin = 10 canvas.drawLine(size/2,1, size/2,size) canvas.drawLine(1,size/2, size,size/2) scale = size/(1*3*2) canvas.setColor("red") canvas.setFill() canvas.drawOval(1,1, size,size) canvas.setColor("yellow") canvas.setFill() canvas.drawOval(1,1, size,size) canvas.drawOval(.1666*size,.1666*size, size*.6666,size*.6666) canvas.drawOval(.3333*size,.3333*size, size*.3333,size*.3333) canvas.setColor("blue") for p in range(num_points): canvas.drawOval(X[p]*scale+size/2,size-(Y[p]*scale+size/2), 2,2)