答案 0 :(得分:1)
你想找到点(x,y),这些点是方程x ^ 2 + y ^ 2 = R ^ 2的解的点。
首先请注意,x和y都必须在[-R,R]中,当你选择x(或y)时,可以通过求解y = sqrt(R ^ 2 - x ^ 2)找到另一个。
另一种方法是使用角度θ和x = R * cos(θ),y = R * sin(theta)。你只需要在[0,2 * PI]弧度中求解theta(sin,cos通常使用弧度,PI弧度为180度)。 这取决于你是否想要使用三角函数(sin / cos是超越函数)。
您可以将这些点(x,y)转换为新的中心(xc,yc),只需将(x1,y1)添加到(x,y)以获得转换点(xt,yt)=(x + xc) ,Y + YC)。
答案 1 :(得分:1)
我假设您希望这些点均匀分布。
圆圈围绕中心360度,或2pi弧度。
你需要将2pi除以你想要的点数。说4 - > 2PI / 4
是从一个点到下一个点的弧度数。
计算x和y坐标使用这两个方程r = sqrt(x2 + y2),和 θ= tan-1(y / x)
其中θ1= 0 * 2 * pi / 4,θ2= 1 * 2 * pi / 4,θ3= 2 * 2 * pi / 4,θ4= 3 * 2 * pi / 4
一些代码看起来像这样:
import numpy as np
def get_points(radius, number_of_points):
radians_between_each_point = 2*np.pi/number_of_points
list_of_points = []
for p in range(0, number_of_points):
list_of_points.append( (radius*np.cos(p*radians_between_each_point),radius*np.sin(p*radians_between_each_point)) )
return list_of_points
答案 2 :(得分:1)
您也可以使用pygame' Vector2
课程。只需旋转半径长度的矢量,然后将其添加到圆心即可得到圆周上的点。
import pygame as pg
from pygame.math import Vector2
def points(number, center, radius):
angle = 360/number
point_list = []
for i in range(number):
# Create a vector with the length of the radius, rotate it
# and add it to the center point to get a point on the circumference.
vec = center + Vector2(radius, 0).rotate(i*angle)
# pygame.draw.circle needs ints, so we have to convert the vector.
point_list.append([int(vec.x), int(vec.y)])
return point_list
def main():
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
center = (320, 240)
radius = 150
number = 2
point_list = points(number, center, radius)
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
elif event.type == pg.KEYDOWN:
if event.key == pg.K_c:
number += 1 # Increment the number and generate new points.
point_list = points(number, center, radius)
screen.fill((30, 30, 30))
pg.draw.circle(screen, (220, 120, 0), center, radius, 2)
for pos in point_list:
pg.draw.circle(screen, (0, 120, 250), pos, 20, 2)
pg.display.flip()
clock.tick(30)
if __name__ == '__main__':
pg.init()
main()
pg.quit()