Форум сайта python.su
Здравствуйте,
появилась проблема определить пересечение координат объекта А и объекта В. Поясню, имеем следующий код, который перемещает овал по холсту, как проверить наезжает ли он на четырехугольники?
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()
Отредактировано Arkadia (Окт. 16, 2015 08:44:55)
Офлайн
самый простой метод = вынести значения коордтнат в переменные и сравнивать их при каждой смене позиции овала
Офлайн
ZerGТоже думал про это, но там на каждую позицию будут же свои условия?
самый простой метод = вынести значения коордтнат в переменные и сравнивать их при каждой смене позиции овала
Офлайн
Лучше сделать из овала прямоугольник, так хотя бы пересечение фигур можно вычислять.
Офлайн
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()
Отредактировано py.user.next (Окт. 18, 2015 09:39:40)
Офлайн
py.user.nextВот этого не знал, благодарю!
Там, оказывается, есть встроенная функция для определения наложений.
Офлайн