История изменений
Исправление peregrine, (текущая версия) :
Какой-нибудь - это какой?
Это тот, в который гарантированно влезет твоя фигура. Но чтобы это обеспечить и гарантировать надо строить его вокруг старого AABBOX-а после поворота. Т.е. он практически во всех случаях (а точнее если был поворот) будет больше, чем надо. Вообще тебе надо перебирать координаты крайних точек как-то так (код очень не оптимален в плане того, что координаты изначально не хранятся в массиве, но так нагляднее, ИМХО):
# -*- coding: utf-8 -*-
from tkinter import *
class Point:
def __init__(self, x_init, y_init):
self.x = x_init
self.y = y_init
def draw_polygon_with_bounds(points_init):
max_y = points_init[0].y
max_x = points_init[0].x
min_y = points_init[0].y
min_x = points_init[0].x
temp_points = list()
for i in points_init:
temp_points.append(i.x)
temp_points.append(i.y)
if i.x > max_x:
max_x = i.x
if i.y > max_y:
max_y = i.y
if i.x < min_x:
min_x = i.x
if i.y < min_y:
min_y = i.y
canv.create_rectangle(min_x, min_y, max_x, max_y, fill='white', outline='green')
canv.create_polygon(*temp_points, fill='white', outline='black')
scene_width = 640
scene_height = 480
points = list()
points.append(Point(40, 40))
points.append(Point(100, 30))
points.append(Point(80, 80))
points.append(Point(30, 90))
canv = Canvas(width=scene_width, height=scene_height, bg='white')
canv.pack()
draw_polygon_with_bounds(points)
mainloop()
Исправление peregrine, :
Какой-нибудь - это какой?
Это тот, в который гарантированно влезет твоя фигура. Но чтобы это обеспечить и гарантировать надо строить его вокруг старого AABBOX-а после поворота. Т.е. он практически во всех случаях (а точнее если был поворот) будет больше, чем надо. Вообще тебе надо перебирать координаты крайних точек как-то так (код очень не оптимален в плане того, что координаты изначально не хранятся в массиве, но так нагляднее, ИМХО):
# -*- coding: utf-8 -*-
import math
from tkinter import *
class Point:
def __init__(self, x_init, y_init):
self.x = x_init
self.y = y_init
def draw_polygon_with_bounds(points_init):
max_y = points_init[0].y
max_x = points_init[0].x
min_y = points_init[0].y
min_x = points_init[0].x
temp_points = list()
for i in points_init:
temp_points.append(i.x)
temp_points.append(i.y)
if i.x > max_x:
max_x = i.x
if i.y > max_y:
max_y = i.y
if i.x < min_x:
min_x = i.x
if i.y < min_y:
min_y = i.y
canv.create_rectangle(min_x, min_y, max_x, max_y, fill='white', outline='green')
canv.create_polygon(*temp_points, fill='white', outline='black')
scene_width = 640
scene_height = 480
points = list()
points.append(Point(40, 40))
points.append(Point(100, 30))
points.append(Point(80, 80))
points.append(Point(30, 90))
canv = Canvas(width=scene_width, height=scene_height, bg='white')
canv.pack()
draw_polygon_with_bounds(points)
mainloop()
Исходная версия peregrine, :
Какой-нибудь - это какой?
Это тот, в который гарантированно влезет твоя фигура. Но чтобы это обеспечить и гарантировать надо строить его вокруг старого AABBOX-а после поворота. Т.е. он практически во всех случаях (а точнее если был поворот) будет больше, чем надо. Вообще тебе надо перебирать координаты крайних точек как-то так (код очень не оптимален в плане того, что координаты изначально не хранятся в массиве, но так нагляднее, ИМХО):
# -*- coding: utf-8 -*-
import math
from tkinter import *
class Point:
def __init__(self, x_init, y_init):
self.x = x_init
self.y = y_init
def draw_polygon_with_bounds(points_init):
max_y = points_init[0].y
max_x = points_init[0].x
min_y = points_init[0].y
min_x = points_init[0].x
temp_points = list()
for i in points_init:
temp_points.append(i.x)
temp_points.append(i.y)
if i.x > max_x:
max_x = i.x
if i.y > max_y:
max_y = i.y
if i.x < min_x:
min_x = i.x
if i.y < min_y:
min_y = i.y
canv.create_rectangle(min_x, min_y, max_x, max_y, fill='white', outline='green')
canv.create_polygon(*temp_points, fill='white', outline='black')
scene_width = 640
scene_height = 480
points = list()
points.append(Point(40, 40))
points.append(Point(100, 30))
points.append(Point(80, 80))
points.append(Point(30, 90))
canv = Canvas(width=scene_width, height=scene_height, bg='white')
canv.pack()
draw_polygon_with_bounds(points)
mainloop()