gpt4 book ai didi

python - 在 tkinter Canvas 上的两点之间绘制圆弧

转载 作者:行者123 更新时间:2023-11-30 22:56:31 25 4
gpt4 key购买 nike

我的问题很简单:我有两个椭圆形,其中心是(x0,y0)和(x1,y1)。如果我想在它们之间画一条线,我会简单地做创建线(x0,y0,x1,y1)。

但我想在它们之间画一条弧线。我在这里的数学很困难。情况如下:

  • 我有这两个中心:它们必须是椭圆的一部分
  • 穿过这两点的椭圆有无数个,但是使用 tkinter,我们只能绘制水平椭圆。 (对吗?)

我需要:

  • 包含椭圆的矩形的左上角和右下角坐标
  • 弧线的起始角度和范围

我也在想也许画弧线是错误的方法?我可以用一条线做一些等效的事情,为此我在该弧上指定了很多点(即使它不是实际的弧)

编辑回答盲人:

使用 tkinter,您可以像这样定义弧: http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/create_oval.html我们不定义椭圆本身,而只定义包含椭圆的矩形的左上角和右下角坐标。

两个椭圆如何相互关联:它们没有。您只需在 Canvas 上的随机位置有两个椭圆形,并且您希望它们之间有一条弧线。我想要连接这些椭圆形两个中心的弧。

最后,如果两个椭圆具有相同的 y 坐标,这是我想要的想法:

ellipse

对于任何职位,我想要的正是这个。

以及 tkinter 代码:

import tkinter as tk

class SampleApp(tk.Tk):

def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)

self.canvas = tk.Canvas(width=400, height=400)
self.canvas.pack(fill="both", expand=True)

self._create_token((100, 100), "white")
self._create_token((200, 100), "pink")

self.canvas.create_arc(100, 100 + 10, 200, 100 - 10, extent=180, style=tk.ARC)

def _create_token(self, coord, color):
'''Create a token at the given coordinate in the given color'''
(x,y) = coord
self.canvas.create_oval(x-5, y-5, x+5, y+5,
outline=color, fill=color, tags="token")

if __name__ == "__main__":
app = SampleApp()
app.mainloop()

最佳答案

有一个用于创建圆弧的start选项,它定义了以给定角度开始绘制的位置。使用这个和一些数学,您可以使用create_arc方法为任何位置绘制圆弧:

import Tkinter as tk


class SampleApp(tk.Tk):

def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)

self.canvas = tk.Canvas(width=400, height=400)
self.canvas.pack(fill="both", expand=True)

self._create_token((100, 100), "white")
self._create_token((200, 300), "pink")
self._create_arc((100,100), (200, 300))

def _create_token(self, coord, color):
'''Create a token at the given coordinate in the given color'''
(x,y) = coord
self.canvas.create_oval(x-5, y-5, x+5, y+5,
outline=color, fill=color, tags="token")

def _create_arc(self, p0, p1):
extend_x = (self._distance(p0,p1) -(p1[0]-p0[0]))/2 # extend x boundary
extend_y = (self._distance(p0,p1) -(p1[1]-p0[1]))/2 # extend y boundary
startAngle = math.atan2(p0[0] - p1[0], p0[1] - p1[1]) *180 / math.pi # calculate starting angle
self.canvas.create_arc(p0[0]-extend_x, p0[1]-extend_y ,
p1[0]+extend_x, p1[1]+extend_y,
extent=180, start=90+startAngle, style=tk.ARC)

'''use this rectangle for visualisation'''
#self.canvas.create_rectangle(p0[0]-extend_x, p0[1]-extend_y,
# p1[0]+extend_x, p1[1]+extend_y)

def _distance(self, p0, p1):
'''calculate distance between 2 points'''
return sqrt((p0[0] - p1[0])**2 + (p0[1] - p1[1])**2)

if __name__ == "__main__":
app = SampleApp()
app.mainloop()

关于python - 在 tkinter Canvas 上的两点之间绘制圆弧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36958438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com