calculate pixel coordinates for 8 equidistant poin

2019-09-05 05:21发布

问题:

I have a circle centred at 0 with radius 80. How using python do I calculate the coordinates for 8 equidistant points around the circumference of the circle?

回答1:

r = 80
numPoints = 8.0
points = []
for index in range(numPoints):
    points.append([r*math.cos((index*2*math.pi)/numPoints),r*math.sin((index*2*math.pi)/numPoints)])
return points

you can simplify this some if you know you are always going to have only 8 points with something like:

r = 80
numPoints = 8
points = []
x = (r*math.sqrt(2))/2
points = [[0,r],[x,x],[r,0],[-x,x],[-r,0],[-x,-x],[0,-r],[x,-x]]
print points

with x being the x/y of the point 45 degrees and 80 units away from the origin



回答2:

click this pic for more clarity

in the above picture.

coordinates 1,2,3,4,5,6,7,8 are equidistant points on a circumference of circle Radius R and its centre is at X (0,0)

take the triangle XLZ , its aright angled at L ,

Let LZ = H , LY = A

    XL + LY = R => XL + A = R => XL = R-A 

since XLZ is right angled , XZ square = XL square + LZ square

                R square = (R-A) square + h square ————1

since these 8 points makes an octagon theta = 360 deg / 8 = 45 deg

tan 45 deg = h / XL = h / R-A => 1 = h/ R-A => h = R-A —————2

Z coordinates are (R-A, h) = > (h,h)

from the equations 1 and 2

R square = h square + h square => 2 h square = R square => h = R/ sqrt 2

so the coordinates at point 2 (Z) = (R/sqrt2, R/sqrt2)

remaining can be derived easily as they are just oppside

So all coordinates are

1 (0,R) 2 (R/sqrt2,R/sqrt2) 3 (R,0) 4 (-R/sqrt2, R/sqrt2) 5 (-R,0) 6 (-R/sqrt2,-R/sqrt2) 7 (0,-R) 8 (R/sqrt2, -R/sqrt2)