Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » tkinter - определение пересечения объектов [RSS Feed]

#1 Окт. 16, 2015 08:44:28

Arkadia
Зарегистрирован: 2015-10-15
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter - определение пересечения объектов

Здравствуйте,
появилась проблема определить пересечение координат объекта А и объекта В. Поясню, имеем следующий код, который перемещает овал по холсту, как проверить наезжает ли он на четырехугольники?

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)

Офлайн

#2 Окт. 17, 2015 07:55:55

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2586
Репутация: +  60  -
Профиль   Отправить e-mail  

tkinter - определение пересечения объектов

самый простой метод = вынести значения коордтнат в переменные и сравнивать их при каждой смене позиции овала



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Окт. 18, 2015 00:36:26

Arkadia
Зарегистрирован: 2015-10-15
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter - определение пересечения объектов

ZerG
самый простой метод = вынести значения коордтнат в переменные и сравнивать их при каждой смене позиции овала
Тоже думал про это, но там на каждую позицию будут же свои условия?

Офлайн

#4 Окт. 18, 2015 06:45:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

tkinter - определение пересечения объектов

Лучше сделать из овала прямоугольник, так хотя бы пересечение фигур можно вычислять.



Офлайн

#5 Окт. 18, 2015 07:24:16

Arkadia
Зарегистрирован: 2015-10-15
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter - определение пересечения объектов

py.user.next
Лучше сделать из овала прямоугольник, так хотя бы пересечение фигур можно вычислять.
А можно поподробнее чем проще? Прошу прощение за несведенье

Офлайн

#6 Окт. 18, 2015 09:38:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

tkinter - определение пересечения объектов

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)

Офлайн

#7 Окт. 18, 2015 14:37:43

Arkadia
Зарегистрирован: 2015-10-15
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter - определение пересечения объектов

py.user.next
Там, оказывается, есть встроенная функция для определения наложений.
Вот этого не знал, благодарю!

Офлайн

  • Начало
  • » GUI
  • » tkinter - определение пересечения объектов[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version