Ich versuche gerade gedrehte zu erkennen, ob ein gedrehtes Rechteck mit einem Punkt kollidiert.
Ich habe dazu folgendes beim suchen gefunden:
https://gamedev.stackexchange.com/quest ... -rectangle
Das Funktioniert aber nicht richtig

jenachdem welche größe und drehung ich nehme, klappt es manchmal und manchmal nicht..
ich habe folgenden Code:
Code: Alles auswählen
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.graphics import Color, Rectangle, Rotate, PushMatrix, PopMatrix
import math
def collides(point_x, point_y, x_rect, y_rect, width_rect, height_rect, center_rect_x, center_rect_y, angle_rect):
angle_sin = math.sin(angle_rect)
angle_cos = math.cos(angle_rect)
x = ((point_x - center_rect_x) * angle_cos - (point_y - center_rect_y) * angle_sin) + center_rect_x
y = ((point_x - center_rect_x) * angle_sin + (point_y - center_rect_y) * angle_cos) + center_rect_y
return x > x_rect and x < x_rect + width_rect and y > y_rect and y < y_rect + height_rect
class TestApp(App):
def __init__(self, **kwargs):
super(TestApp, self).__init__(**kwargs)
def build(self):
layout = BoxLayout()
widget = Widget()
with widget.canvas.before:
PushMatrix()
Rotate(angle=75, origin=(200, 150))
with widget.canvas:
Color(1, 0, 0, 1)
self.rect = Rectangle(pos=(100, 100), size=(200, 100))
with widget.canvas.after:
PopMatrix()
widget.bind(on_touch_down=self.check)
layout.add_widget(widget)
return layout
def check(self, root, touch):
print(collides(*touch.pos, *self.rect.pos, *self.rect.size, self.rect.pos[0] + self.rect.size[0]/2, self.rect.pos[1] + self.rect.size[1]/2, 75))
if __name__ == "__main__":
app = TestApp()
app.run()