python - 在两点之间创建弧线pygame
问题描述
我正在尝试在具有已知梯度的两条直线之间创建一条平滑曲线,我找到了一个方程式来找到这两个点,但是当我尝试找到每个点的角度时,弧线没有对齐。我已经完成了数学和它(应该)是正确的。
def angle(A,B):
o = abs(B[1]-A[1])
a = abs(B[0] - A[0])
angle = math.atan(o/a)
return angle
a1 = angle((250, 175),(75, 300))
a2 = angle((250, 175),(400, 315))
pygame.draw.arc(gameDisplay, WHITE, (0 ,0 ,500,350), (math.pi) + a2,(2*math.pi) - a1)
pygame.draw.line(gameDisplay, BLUE, [400,0], [400, 500], 1)
pygame.draw.line(gameDisplay, BLUE, [0,315], [1000, 315], 1)
pygame.draw.line(gameDisplay, RED, [75,0], [75, 500], 1)
pygame.draw.line(gameDisplay, RED, [0,300], [1000, 300], 1)
这是查找起点和终点角度的基本代码,其中 (250,175) 是椭圆的中心, (75, 300) 和 (400, 315) 是两个点。这些线是弧应该开始和停止的地方。
解决方案
你画的不是完美的圆弧,实际上你画的是椭圆弧。在计算弧的开始和结束角度时,您必须考虑传递给pygame.draw.arc()
( ) 的矩形区域。
正如评论中提到的,您必须使用而不是在 [ , ]范围内获得角度。在 pygame 中,y 轴指向下方,因此方向向量的 y 分量必须反转(0, 0, 500, 350)
math.atan2
math.atan
-pi
pi
def angle(A, B, aspectRatio):
x = B[0] - A[0]
y = B[1] - A[1]
angle = math.atan2(-y, x / aspectRatio)
return angle
a1 = angle((250, 175), (75, 300), 500/350)
a2 = angle((250, 175),(400, 315), 500/350)
pygame.draw.arc(gameDisplay, WHITE, (0, 0, 500, 350), a1, a2)
推荐阅读
- rust - 从 `svd2rust` 生成的库不是带有模块的标准格式
- .net - 使用 ChartJS 在 C# 中显示图表
- python-3.x - python中列值的条件赋值
- javascript - 将脚注放在页面底部,即文本中的注释
- ios - AVFoundation -AVCaptureSession 仅在进入后台并使用断点返回时停止并开始运行
- axapta - 如何将表从 MS Dynamic AX 的 AOT 同步到 Microsoft SQL Server 2014 Express
- docker - 使用的 docker 大小大于实际图像的总大小
- jupyter-notebook - 如何查看 Google Colaboratory 的 IP 地址和端口?
- python-3.x - 如何创建一个函数,将每个列表项标识为字符串、浮点数或整数,然后打印一个类似 [str, int....] 的列表
- firebase-realtime-database - 如何在firebase中将一个用户设置为管理员?