import sys
import numpy as np
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtWidgets import QWidget, QApplication
points = [np.array((400, 400)), np.array((100, 450)), np.array((100, 600)), np.array((400, 550))]
sides = [points[(i + 1) % 4] - points[i] for i in range(4)]
normals = [np.array([p[1], -p[0]]) for p in sides]
tested = []
def test(p, v, t):
return (t - p).dot(v) > 0
class Example(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(300, 300, 800, 800)
self.setWindowTitle('RectangleTest')
self.show()
def paintEvent(self, event):
qp = QPainter()
qp.begin(self)
for i in range(4):
qp.drawLine(*points[i - 1], *points[i])
for p, c in tested:
qp.setBrush(QColor(*c))
s = np.array([10, 10])
qp.drawEllipse(*(p - s / 2), *s)
qp.setBrush(QColor(0, 0, 0))
qp.end()
def mousePressEvent(self, event):
pos = np.array([event.pos().x(), event.pos().y()])
res = [test(p, n, pos) for p, n in zip(points, normals)]
print(res, all(res))
tested.append((pos, (0, 255, 0) if all(res) else (255, 0, 0)))
self.repaint()
if __name__ == '__main__':
app = QApplication([])
ex = Example()
sys.exit(app.exec_())