如果您不想使用其他库,只使用tkinter,我认为在tkinter中没有内置函数可以实现此功能。我也不确定为什么所有东西都必须在tkinter中完成,因为程序使用多个库并不罕见。就我个人而言,考虑到tikinter的局限性,我会使用pygame来跟踪多边形及其相交,但从不画出它们。除了使用第三方库(tikinter,python默认和其他库)之外,还有一种方法,那就是应用老式的数学方法。
这里有一些关于如何实现这一点的文档。祝你好运。
编辑:我在学习其他内容时无意中使用数学找到了您问题的答案。仍然没有在tkinter中实现的方法,但是以下是数学解释。
circle with center (x,y) and radius r
Polygon with z number of sides with x*2-1 number of points(x,y)
如果您迭代多边形的线条并将它们通过以下数学公式进行处理:
Line J (x1,y1)(x2,y2)
m of Line J = (y1-y2)/(x1-x2)
create line P from circle center to P1 of LineJ
create line O from circle center to P2 of LineJ
现在我们有一个三角形
take the inverse cosine and length of P and O to get angle of the triangle you just made.
Make a right triangle by bisecting the triangle with line K starting at circle center and going out at the angle you just calculated.
现在您有线P以及线P相对于线K的1/2角度
现在要找到该中间角线的截距点
Tan(1/2 angle) = slope or m of the new line
using the x,y of the circle center calculate the slope intercept formula y=mx+b and get b
现在用J线的斜率截距公式,将其设置为新线的斜率截距。
line J (mx + b) = y = line P (mx + b)
Solve for y
然后在截距式中用y代入其中一个,解出x。
完成后,您将拥有4个点。三个点位于三角形内,第四个点是从J线到圆心的垂线上的点。
如果这些点中任意3个到圆心的距离小于r,则它们重叠。如果它们全部都大于r,则它们不重叠。
block
的坐标,然后使用这些坐标调用find_overlapping
函数,它会返回所有重叠的对象列表。 - Bryan Oakley