如何在Pygame中画一个1/4的圆?

问题描述

我正在使用Python 3.7.4和Pygame 1.9.6。我知道pygame.draw.arcpygame.draw.circle。我想像这样画一个四分之一圈:

enter image description here

这是足球场的四分之一圈。

我的尝试:

pygame.draw.arc(screen,(255,255,255),(75,25,50,50),90,120,5)

enter image description here

pygame.draw.arc(screen,80,100,5)

改变开始角度和结束角度似乎并没有改变。

enter image description here

因此它必须是绘制边界的坐标。 当我在此(75,50)中更改75时,它只会使圆圈更向右移动。如果将(75,50)中的25进行更改,则它会进一步增加或减少。如果我更改(75,50)中的前50个,则它会根据数字的变化而变大或变小。如果我更改(75,50)中的第二个50,则会使高度变大或变小。 我刚刚尝试了角度的小数,因为坐标必须是整数。当我做pygame.draw.arc(screen,95.5,100.5,5)时,请看小数。

我得到:

enter image description here

所以也许关键是它改变了开始和结束的角度,我将不断更新发现的内容。 我在评论中@bashbedlam的帮助下找到了合适的人:

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

enter image description here

我更改了坐标,但保持相同的开始和结束角度。 尽管我讨厌小黑点,但这几乎是完美的。 屏幕为600 x 600 我不能成直角或圆本身。我不大声使用小数。只允许整数。因此,我不知道如何正确地制作四分之一圈。我感谢您的建议和感谢。

我只是想对那些帮助我的人说我创建了自己的足球场。我把所有的行都画了出来,但是后来我把它变成了png,这样就不会让我不厌其烦地不断加载27条带有背景的行。在每个人的帮助下,这是完成的结果:

enter image description here

解决方法

您的代码存在的问题是,class CustomConverter extends StdConverter<String,Custom> { private final ObjectMapper mapper = new ObjectMapper(); @Override public Custom convert(String value) { try { return mapper.readValue(value,Custom.class); } catch (JsonProcessingException e) { throw new IllegalArgumentException(value); } } } class Dto { private String name; @JsonDeserialize(contentConverter = CustomConverter.class) private List<Custom> customs; } 按照documentation所述以弧度表示的角度。同样,在90到120之间的角度不会像您需要的那样绘制和弧形,在90到-90的角度会成弧形。

pygame.draw.arc

编辑:

因此,我一直在网上寻找pygame.draw.arc的方法,以在不使用浮点数的情况下绘制不带点的弧,但是没有任何办法,所以我为您编写了此函数。如果您认为此函数不是编写的代码的一部分(例如pygame.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),[900,300,100,100],math.radians(90),math.radians(-90),5)
    pygame.draw.arc(d,[300,5)

    pygame.display.update()

像指南针一样考虑此功能,它会在您指定的角度(以度为单位)之间绘制一个圆弧。参数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是圆弧与中心的距离。因此,现在只需在4个不同的角上绘制四分之一圆即可。

distance

顺便说一句,使用此功能会影响性能,因此,我强烈建议尽可能将import pygame from math import radians,sin,cos pygame.init() d = pygame.display.set_mode((1200,600)) def drawArc(display,color) theta += 0.01 while True: pygame.event.get() d.fill((255,255)) drawArc(d,-90,[0,0],thickness=5) drawArc(d,180,270,[1200,90,600],thickness=5) pygame.display.update() 与浮点数一起使用。