Найти - Пользователи
Полная версия: tkinter - определение пересечения объектов
Начало » GUI » tkinter - определение пересечения объектов
1
Arkadia
Здравствуйте,
появилась проблема определить пересечение координат объекта А и объекта В. Поясню, имеем следующий код, который перемещает овал по холсту, как проверить наезжает ли он на четырехугольники?
from tkinter import *
root = Tk()
canvas = Canvas(root, width=800, height=600)
canvas.pack()
canvas.create_rectangle(300, 300, 700,500, fill="Brown")
canvas.create_rectangle(100, 0, 300,500, fill="Brown")
igrok = canvas.create_oval(10, 10, 40, 40, fill="Yellow")
def vpravo(event):
    canvas.move(igrok, 10, 0)
def vlevo(event):
    canvas.move(igrok, -10, 0)
def vverh(event):
    canvas.move(igrok, 0, -10)
def vniz(event):
    canvas.move(igrok, 0, 10)
root.bind('<Right>', vpravo)
root.bind('<Left>', vlevo)
root.bind('<Down>', vniz)
root.bind('<Up>', vverh)
root.mainloop()
ZerG
самый простой метод = вынести значения коордтнат в переменные и сравнивать их при каждой смене позиции овала
Arkadia
ZerG
самый простой метод = вынести значения коордтнат в переменные и сравнивать их при каждой смене позиции овала
Тоже думал про это, но там на каждую позицию будут же свои условия?
py.user.next
Лучше сделать из овала прямоугольник, так хотя бы пересечение фигур можно вычислять.
Arkadia
py.user.next
Лучше сделать из овала прямоугольник, так хотя бы пересечение фигур можно вычислять.
А можно поподробнее чем проще? Прошу прощение за несведенье
py.user.next
Arkadia
А можно поподробнее чем проще?
Там, оказывается, есть встроенная функция для определения наложений.

from tkinter import *
 
root = Tk()
canvas = Canvas(root, width=800, height=600)
canvas.pack()
rect1 = canvas.create_rectangle(300, 300, 700,500, fill="Brown")
rect2 = canvas.create_rectangle(100, 0, 300,500, fill="Brown")
igrok = canvas.create_oval(10, 10, 40, 40, fill="Yellow")
 
def f():
    if igrok in canvas.find_overlapping(300, 300, 700, 500):
        print('see on rect1')
    if igrok in canvas.find_overlapping(100, 0, 300, 500):
        print('see on rect2')
 
def vpravo(event):
    canvas.move(igrok, 10, 0)
    f()
 
def vlevo(event):
    canvas.move(igrok, -10, 0)
    f()
 
def vverh(event):
    canvas.move(igrok, 0, -10)
    f()
 
def vniz(event):
    canvas.move(igrok, 0, 10)
    f()
 
root.bind('<Right>', vpravo)
root.bind('<Left>', vlevo)
root.bind('<Down>', vniz)
root.bind('<Up>', vverh)
root.mainloop()
Arkadia
py.user.next
Там, оказывается, есть встроенная функция для определения наложений.
Вот этого не знал, благодарю!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB