Hjälp med formel för att plotta koordinater
Postat: 1 augusti 2018, 13:16:51
Jag har ett programmeringsproblem, som jag inte lyckats hitta någon lösning på. Kanske för att jag inte hittat rätt söktermer. Matematiken som är involverad är tyvärr utanför mina egna kunskaper, så jag tänkte göra ett försök att posta det här.
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):
Där c1, c2, c3 och c4 är de fyra hörnen, aPos är den koordinat som skall räknas ut, aWidth och aHeight definerar det nya koordinatsystemet och resultatet är positionen i det nya koordinatsystemet. Funktionen behöver alltså dels "rotera rätt", dels skala om värdena om proportionerna inte är desamma.
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?
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?