U hebt waarschijnlijk reeds de correcte vergelijkingen afgeleid, maar door het hoe dan ook gegaan.
U wilt een stijve transformatie die (x1, y1) (x3, y3), en (x2, y1) vertaalt (x4, y4).
Wij kunnen aan de stijve die transformatie als vertaling denken, door een omwenteling wordt gevolgd. Wij zullen met een vertaling beginnen die zich (x1, y1) beweegt (x3, y3). Dit is gemakkelijk:
(a, B) ---> (a + x3 - x1, B + y3 - y1)
de truc zal doen.
Nu, willen wij een transformatie die rond het punt roteert (x3, y3) zodat het punt oorspronkelijk bij (x2, y1), dat over (x2 + x3 - x1, y3) in kaart is gebracht, roteert over (x4, y4).
Werk de hoek van deze omwenteling uit. Herinner eraan dat de richting van een vector (x, y) door de (y, x) functie atan2 (de meeste math bibliotheken hebben een atan2 die het kwadrant van de vector evenals zijn arctan bepaalt - gebruik niet de eenvoudige atan (y/x) kan worden bepaald functie voor dit).
Zo is de totale omwenteling enkel het verschil tussen de twee hoekige richtingen, dat is
theta = atan2 (y4 - y3, x4 - x3) - atan2 (x2 - x1, 0)
(herinner dat wij vectoren nodig hebben die op het punt beginnen (x3, y3), zodat moet dit van allebei van de punten) worden afgetrokken.
O.k., nu, passen wij eenvoudig een omwentelingsverrichting toe.
(c, D) > (c * cos. (theta) - D * zonde (theta), c * zonde (theta) + D * cos. (theta))
waar (c, D) = (a + x3 - x1, B + y3 - y1), van voordien.
Als u vindt dat u weg door een paar pixel dichtbij de rand van uw beeld zou kunnen zijn, lijdt u aan een resolutieprobleem: de ware plaatsen van uw twee punten zijn niet werkelijk (x3, y3) en (x4, y4), maar die zijn enkel het dichtst coördineren. Dit beïnvloedt niet de vertaling, aangezien de zelfde die (sub-pixel) fout enkel door het beeld wordt verspreid wordt. Maar voor de omwenteling, kon zich een kleine fout in de omwenteling dichtbij (x4, y4) in een grotere fout verder afwenden. Fundamenteel, zal de fout iets rond de resolutie van uw die beeld zijn door abs wordt verdeeld (x2 - x1). Als x2 en x1 samen dicht zijn, kunt u zien waarom u weg door een paar pixel zou kunnen zijn.
Er is werkelijk geen goede manier om voor dit te verbeteren, buiten nauwkeuriger het worden coördineert voor (x3, y3) en (x4, y4), of krijgend afbeeldingen voor meer dan twee punten, en doend een beste geschikt op de vertaling en de omwenteling u wilt.
Hoop dit helpt!