Python 如何围绕两点绘制矩形

Python 如何围绕两点绘制矩形,python,pygame,trigonometry,Python,Pygame,Trigonometry,我正在使用pygame和数学模块尝试在两点周围绘制一个矩形。我的意思是: 从点到矩形端点的距离指定为类的属性。我已经尝试了很多,以使它的位置,和角度显示可能是唯一的工作角度。这是我的矩形类: def Pol(x,y): “”“将直角坐标转换为极坐标”“” 如果x==0:#这可能是我的问题的根源,但如果没有它,它会在某些地方产生零错误 如果y>=0: 返回[y,90] 其他: 返回[-y,270] r=数学sqrt(x**2+y**2) 角度=(数学角度(数学角度((y/x)))%360 返回[

我正在使用pygame和数学模块尝试在两点周围绘制一个矩形。我的意思是:

从点到矩形端点的距离指定为类的属性。我已经尝试了很多,以使它的位置,和角度显示可能是唯一的工作角度。这是我的矩形类:

def Pol(x,y):
“”“将直角坐标转换为极坐标”“”
如果x==0:#这可能是我的问题的根源,但如果没有它,它会在某些地方产生零错误
如果y>=0:
返回[y,90]
其他:
返回[-y,270]
r=数学sqrt(x**2+y**2)
角度=(数学角度(数学角度((y/x)))%360
返回[r,角度]
类路径(pygame.sprite.sprite):
def _u初始(自身、开始、结束、颜色、宽度,**选项):
自我记录更新(选项)
self.start=开始
self.end=结束
self.color=color
#调用父类(Sprite)构造函数
super()。\uuuu init\uuuuu()
#传入水滴的颜色及其x和y位置、宽度和高度
#设置背景色并使其透明
self.width=宽度
#画一条路
self.redraw()
#获取具有图像尺寸的矩形对象。
self.rect=self.image.get_rect()
self.rect.x,self.rect.y=(self.start[0]-self.width//2+self.ix,
self.start[1]-self.width//2+self.iy)
如果自反:
self.rect.y-=(math.ceil(self.image.get_rect()[3]/2)-self.iy)
def重绘(自):
dis,angle=Pol(自结束[0]-自开始[0],自结束[1]-自开始[1])
dis+=自宽
_image=pygame.Surface([dis,self.width])
_image.fill([255,255,255])
_image.set_colorkey([255,255,255])
pygame.draw.rect(_image,self.color,pygame.rect(0,0,dis,self.width))
nangle=(180角)%360
自反转=nangle>=180
self.image=pygame.transform.rotate(_image,nangle)
i1=\u image.get\u rect()
i2=self.image.get_rect()
ix=i2[2]-i1[2]
iy=i2[3]-i1[2]
self.ix=ix//2
self.iy=iy//2
所以,我把一些要点传递给它,它负责所有的重物搬运和绘图。我在图像中经过的点是
(100100)和(200200)
。然后我用
(300,300)和(200,200)
进行了尝试,它的表现半成功:

代码在上面,您可以使用其他值进行尝试,但您会发现它很快就会出现问题。总而言之,我的问题是,有没有一种强大的方法可以围绕给定的两点绘制一个矩形?我试过:

  • 绘制粗线条时,pygame线条会以一定角度分开,并具有水平端点
  • 反复测试和玩弄这些价值观,我尝试过的都不管用
  • 更改反转if语句。根据我认为应该发生的事情,它已经落后了

问题在于函数
math.atan()
返回范围[-pi/2,+pi/2]内的角度。
使用
math.atan2()
(请参阅),它返回范围[-pi,+pi]内的角度。因此,此函数可立即提供正确的角度,您无需进行任何校正:

角度=(数学度(数学角((y/x)))%360

angle=math.degrees(math.atan2(y,x))


另请参见

因此,规则是矩形的长轴应与穿过两点的直线对齐,且其宽度/高度应足以包含该线段以及每侧的特定额外量?您是正确的(Python函数反映了C函数)。