Som utgångspunkt finns en yta som är definierad av 4 punkter (x1,y1 till x4,y4). Koordinatsystemet för dessa är odefinierat (flyttal, men ingen fördefinierad storlek). Ytan kan ha valfri rotering - det enda som är känt är att det är en rektangel, så alla vinklar är 90 grader. Inom denna yta så får jag koordinater (illustrerat som xP,xP). Illustrationen visar tre exempel på hur det kan se ut: Det jag behöver kunna göra är att mappa dessa koordinater (xP,xP) till en bild som inte är roterad, och med sitt eget koordinatsystem där 0,0 antingen är toppvänster eller center. Dvs jag behöver en funktion som tar fem koordinater (i samma koordnatsystem) och två värden för bredd och höjd (det nya koordinatsystemet) som indata, och som utdata ger X och Y värde i det nya koordinatsystemet.
Något i stil med detta (det är Delphi-kod, men principen bör vara begriplig):
Kod: Markera allt
Type
TCoordinate = record
X: Float;
Y: Float;
end;
function CalcPosition(c1, c2, c3, c4 : TCoordinate; aPos : TCoordinate; aWidth, aHeight : Float) : TCoordinate;
begin
// Calculation
end;
Funktionen behöver också kunna hantera att positionen ligger utanför den definerade rektangeln, men då givetvis också returna värden som ligger utanför den "nya" rektangeln.
Någon som antingen har eller kan skriva en formel för detta, eller har några tips att dela med sig av?