如何在pygame中绘制一个圆圈的1/4? 我使用Python 3.7.4和Pygame 1.9.6。我知道pygame.draw.arc和pygame.draw.circle。我想像这里一样绘制四分之一圈: 这是足球场的四分之一圈。 我的尝试:

问题描述 投票:0回答:1
。我想在这里绘制四分之一圈:

这是足球场的四分之一圈。
我的尝试:
enter image description herepygame.draw.arc(screen, (255, 255, 255), (75, 25, 50, 50), 90, 120, 5)

pygame.draw.arc(screen, (255, 255, 255), (75, 25, 50, 50), 80, 100, 5)

改变起始角度和结尾角并不会改变它的外观。 enter image description here

因此,它必须是绘制边界的坐标。
当我在此更改75时,它只会使圆向右移动。如果更改为25,则可以使其上升或向下移动。如果我更改了前50个,则可以根据更改数字而更大或更小的宽度。如果我更改第二个50,则可以使高度更大或更小。
我刚刚尝试了小数的角度,因为坐标必须是整数。当我这样做

(75, 25, 50, 50)

看小数。 我得到:

enter image description here

也许它更改了开始和结束角度的关键我会继续更新我的发现。
在评论中,我在@bashbedlam的帮助下找到了合适的人:
(75, 25, 50, 50)
我更改了坐标,但保持相同的启动和结尾角。
尽管我确实讨厌黑点,但这几乎是完美的。
屏幕是

(75, 25, 50, 50)

我无法达到直角或圆本身。我不允许使用小数。仅允许整数。因此,我不知道如何正确地制作四分之一圈。感谢建议和感谢。

我只是想为帮助我的人说,我创造了自己的足球场。我把所有的线条都拔出了,但是后来我将其变成了一个PNG,因此它不会不断地用背景来落后所有27行。这是每个人的帮助的最终结果:

enter image description here

代码的问题是,
(75, 25, 50, 50)
如documentation中所述,在弧度中占据角度。同样,在90到120之间的角度不会像您需要一样绘制和弧形,90至-90 Will。

pygame.draw.arc(screen, (255, 255, 255), (75, 25, 100, 50), 95.5, 100.5, 5) enter image description hereEdit:

因此,我正在网上寻找pygame.draw.arc在不使用浮点数的情况下绘制弧线的方法,但没有任何东西,所以我为您编写了此功能。如果您认为此函数不是您编写的代码的一部分(例如pygame.draw.arc),那么从技术上讲,您不会使用小数,因为小数仅在功能内部使用(精选了系统)。这是功能:

pygame.draw.arc(screen, (255, 255, 255), (60, 13, 50, 50), 17, 13, 5)

想想此函数就像指南针一样,它在您指定的角度(以度为单位)之间绘制一个弧线。论点

600 x 600是指南针的中心,enter image description herepygame.draw.arc是弧线与中心的距离。因此,现在只需在四个不同的角度绘制四分之一圆圈。

import pygame import math pygame.init() d = pygame.display.set_mode((1200, 600)) while True: pygame.event.get() d.fill((255, 255, 255)) pygame.draw.arc(d, (0, 0, 0), [900, 300, 100, 100], math.radians(90), math.radians(-90), 5) pygame.draw.arc(d, (0, 0, 0), [300, 300, 100, 100], math.radians(-90), math.radians(90), 5) pygame.display.update()
python pygame
1个回答
2
投票
BTW,使用此函数阻碍性能,因此我强烈建议使用

def drawArc(display, startAngle, endAngle, distance, pos, color, thickness=1): if startAngle > endAngle: theta = endAngle bigger = startAngle else: theta = startAngle bigger = endAngle while theta < bigger: for t in range(thickness): x = round((cos(radians(theta)) * (distance-t)) + pos[0]) y = round((-sin(radians(theta)) * (distance-t)) + pos[1]) display.set_at((x, y), color) theta += 0.01

如果可能的话,将
pos与浮点号一起使用。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.