如何解决如何在Pygame中画一个1/4的圆?
我正在使用Python 3.7.4和Pygame 1.9.6。我知道pygame.draw.arc
和pygame.draw.circle
。我想像这样画一个四分之一圈:
这是足球场的四分之一圈。
我的尝试:
pygame.draw.arc(screen,(255,255,255),(75,25,50,50),90,120,5)
pygame.draw.arc(screen,80,100,5)
改变开始角度和结束角度似乎并没有改变。
因此它必须是绘制边界的坐标。
当我在此(75,50)
中更改75时,它只会使圆圈更向右移动。如果将(75,50)
中的25进行更改,则它会进一步增加或减少。如果我更改(75,50)
中的前50个,则它会根据数字的变化而变大或变小。如果我更改(75,50)
中的第二个50,则会使高度变大或变小。
我刚刚尝试了角度的小数,因为坐标必须是整数。当我做pygame.draw.arc(screen,95.5,100.5,5)
时,请看小数。
我得到:
所以也许关键是它改变了开始和结束的角度,我将不断更新发现的内容。 我在评论中@bashbedlam的帮助下找到了合适的人:
pygame.draw.arc(screen,(60,13,17,5)
我更改了坐标,但保持相同的开始和结束角度。
尽管我讨厌小黑点,但这几乎是完美的。
屏幕为600 x 600
我不能成直角或圆本身。我不大声使用小数。只允许整数。因此,我不知道如何正确地制作四分之一圈。我感谢您的建议和感谢。
我只是想对那些帮助我的人说我创建了自己的足球场。我把所有的行都画了出来,但是后来我把它变成了png,这样就不会让我不厌其烦地不断加载27条带有背景的行。在每个人的帮助下,这是完成的结果:
解决方法
您的代码存在的问题是,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()
与浮点数一起使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。