Auf dem Rand eines Quadrats laufen
-
Hallo,
ich suche eine Funktion f(t), die mir für ein gegebenes t(0..1) einen Punkt auf einem Quadrat zurück gibt.
Also mein Ziel ist es auf dem Rand eines Quadrats zu laufen, wobei t=0 und t=1 Start und Endpunkt sind. t=0.5 wäre dann ein halb abgelaufenes Quadrat usw...
Das äquivalent zu einem Kreis wären y=sin(...), x=cos(...).
Ideen?
Danke!
-
du musst die Funktion aus 4 verschiedenen Teilfunktionen kombinieren, wobei jede Teilfunktion für eine Seite des Quadrats steht.
-
...oder einfach einen Kreis zu einem Quadrat ausbeulen:
-
Danke erstmal.
Ich habe jetzt diese Funktion gebastelt:
Sie fängt oben-mittig des Quadrats an und geht gegen den Uhrzeigersinn.
Das ganze habe ich grafisch dargestellt(SFML), leider liefert mir das aber einen merkwürdigen knick bei t > 6/8. Liegt das an der Funktion oder an der Grafikschnittstelle?Vector2f getQuadPointCCW(float t) { Vector2f retVal; if(t < 1.f/8.f) { retVal.x= 0.5f - 4*t; //0,5..0 retVal.y=0; } else if(t < 3.f/8.f) { //t > 1.f/8.f retVal.x = 0; retVal.y = (1+4*(t-3.f/8.f));//0..1 } else if(t < 5.f/8.f) { //t > 3.f/8.f retVal.x = (1+4*(t-5.f/8.f));//0..1 retVal.y = 1; } else if(t < 7.f/8.f) { //t > 5.f/8.f retVal.x = 1; retVal.y = 0.f; //1.f - 4*(t-5.f/8.f);//1..0; } else if(t <= 8.f/8.f) { //t > 7.f/8.f retVal.x = 0.75f;//1.f - 4*(t-7.f/8.f);//1..0,5; retVal.y = 0; } return retVal; }
Grafischer teil:
if(t> 1.f/8.f) { Shape.AddPoint(sf::Vector2f(0.0f, 0.0f), OverlayColor); } if(t> 3.f/8.f) { Shape.AddPoint(sf::Vector2f(0.0f, 1.0f), OverlayColor); } if(t> 5.f/8.f) { Shape.AddPoint(sf::Vector2f(1.0f, 1.0f), OverlayColor); } if(t> 7.f/8.f) { Shape.AddPoint(sf::Vector2f(1.0f, 0.0f), OverlayColor); } Shape.AddPoint(getRectPointCCW(t), OverlayColor); Shape.Scale(100); App.Draw(Shape);
-
Anmerkung: (0,0) ist links-oben, (1,1) rechts unten.