(relativ) einfache frage, kreis- und geradengleichungen



  • Hallo,

    Ich versuche gerade mit c++ einen kleinen "raytrayer" im zweidimensionalen Raum zu schreiben.

    void RaySchiessen( float SchnittWinkel )
    {
    	// DEBUG ->
    	float KreisMittelPunktX = 400.f;
    	float KreisMittelPunktY = 400.f;
    	float KreisRadius = 200.f;
    	// <- DEBUG
    
    	float PunktX = 1.f;
    	float PunktY = 1.f / tan(SchnittWinkel); 
    
    	float GeradenSteigung = PunktY / PunktX;
    
    	// walk along ray
    
    	for( float i = 0; i <= WindowSizeX; i += 1.f )
    	{
    		float GeradePunktX = i;
    		float GeradePunktY = GeradenSteigung * GeradePunktX;
    
    		if( GeradePunktY >= WindowSizeY )
    			break;
    
    		App.Draw( sf::Shape::Rectangle( GeradePunktX, GeradePunktY, GeradePunktX + 1, GeradePunktY + 1, sf::Color( 255, 0, 0, 255 )) );
    
    		if( std::sqrt( std::pow( GeradePunktY - KreisMittelPunktY, 2 )  + pow( GeradePunktX - KreisMittelPunktX, 2 ) ) <= KreisRadius )
    		{
    			App.Draw( sf::Shape::Rectangle( GeradePunktX - 2, GeradePunktY - 2, GeradePunktX + 2, GeradePunktY + 2, sf::Color( 255, 255, 255, 255 )) );
    			break;
    		}
    	}
    }
    

    Das ist meine Funktion, mit der ich die Rays schiesse. ( Als Parameter hat sie den Schnittwinkel zur y-achse ).

    Nun wollte ich aber nicht jeden Punkt auf der Geraden entlang"laufen" sondern das ein bisschen besser lösen.. mit den Geraden- und Kreisgleichungen.

    Mit meinem Test hats schon relativ gut geklappt:

    Gerade: y=-0,5x + 2
    Kreis:  (x-4)² + (y-1)² = 25
    
    ( x - 4 )² + ( 2 - 0,5x -1)² = 25
    ( x - 4 )² + ( 1 - 0,5x )² = 25
    x² - 8x + 17 - x + 0,25x² = 25
    1,25x² - 9x + 17 = 25
    1,25x² - 9x = 8
    1,25( x² - 7,2x ) = 8
    x² - 7,2x = 6,4
    x² - 7,2x - 6,4 = 0
    

    und dann eben mit pq-formel ergebniss gekriegt, hat gepasst.

    Nun muss ich aber wohl oder übel das gleiche mit variablen machen.

    Gerade: y=m*x + t
    Kreis:  (x-a)² + (y-b)² = c
    
    ( x - a )² + ( ( m * x + t ) - b )² = c
    

    und jetzt muss ich DAS irgendwie auf die Form einer quadratischen Gleichung bringen.. 😞 Leider weiß ich garnicht wie ich das anstellen soll, villeicht kann mir ja hier jemand helfen? (:


  • Mod

    Ganz einfach genauso mit den Variablen rechnen, wie mit den Zahlen. Wie in der Schule:

    ( x - a )² + ( ( m * x + t ) - b )² = c	
    x² -2ax + a² + (mx + (t-b))² = c
    x² -2ax + a² + m²x² + 2 (t-b) m x + (t-b)² = c
    (1+m²)x² + (2 m (t-b) - 2a)x + (a² + (t-b)²) = c 
    x² + ((2m(t-b))/(1+m²)) x + (a² + (t-b)²)/(1+m²) = c/(1+m²)
    x² + ((2m(t-b))/(1+m²)) x + ((a² + (t-b)² - c)/(1+m²)) = 0
    


  • Ich würde Vektoren zur Berechnung verwenden.

    In deinem Programm kannst du keine "senkrechten" Geraden
    behandeln.


Anmelden zum Antworten