我需要获取方向矢量[x,y],使其指向与该点所在的圆完全相反的方向。
我试图仅将x和y坐标分配给该点,但这将它们都指向同一方向
r = 70 # radius of circle
a = 0 # angle var
#create a while loop as long as the angle is bellow 2pi
while a < pi*2:
# create an x and a y coordinate around the circle
x = int(r * cos(a)) + 200
y = int(r * sin(a)) + 200
# add a ray class on that point # \/ I want to figure out these vectors
rays += [(rayClass.Ray(x, y, 1, [direction x, direction y]))]
# increment the angle slightly
a += 0.01
ray类只是将在给定的xy坐标上投射一条直线的点
我需要x和y方向精确指向它们所在的圆的中心。我将如何计算它们?
答案 0 :(得分:1)
从圆心到点的方向向量为:
dx, dy = cos(a), sin(a)
此方向与从法线向量到圆上的点的方向相同。因此可以通过以下方式设置射线:
x = round(r * dx) + 200
y = round(r * dy) + 200
rays += [(rayClass.Ray(x, y, 1, [dx, dy]))]
请注意,在这种情况下,方向向量是Unit vector(单位向量的长度是1),因此分量是浮点数。
如果方向必须是整数,并且其长度必须是圆的半径:
rx, ry = round(r * cos(a)), round(r * sin(a))
x, y = rx + 200, ry + 200
rays += [(rayClass.Ray(x, y, 1, [rx, ry]))]
另一种可能性是在PyGame中使用pygame.math.Vector2
进行矢量运算。
可以通过-
运算来计算方向向量,而Unit vector可以得到.normalize()
(单位向量的长度为1):
circle_center = pygame.math.Vector2(200, 200)
point_on_circle = pygame.math.Vector2(x, y)
direction = point_on_circle - circle_center
unit_direction = direction.normalize()
rays += [(rayClass.Ray(x, y, 1, [unit_direction[0], unit_direction[1]]))]
答案 1 :(得分:0)
您从在该点结束的半径获得方向。从您的稀疏代码演示中,我收集到您的圆以原点为中心,并且您的“射线”主要由端点和射线上的任何其他点定义。
这很简单:射线的斜率(方向)是
m = (y-0)/(x-0)
,起始点为(x,y)。因此,包含射线的线的方程为
y' = mx' for variables x', y', x' >= x
因此,您的射线微不足道:(x, y)
的端点(您已经知道)和[x,y]的方向向量。为了安全起见,我建议将其倍增,以确保后者指向射线上的点(圆之外)。
(x, y, 1, [2*x, 2*y])
我不确定,因为您完全无法定义类,但这给了您第二个点,恰好是圆外的一个半径。