sdl: objekt rotieren?



  • achso, hatte math.h inkludiert...das is dann ja unnötig...danke jetzt klappts alles!
    achne...PI erkennt es nicht, trotz cmath
    float rot = rot2 * PI/180;
    ->error C2065: 'PI' : nichtdeklarierter Bezeichner



  • Huch?

    Naja, dann schreib einfach am Anfang

    const double PI = 3.141592654
    


  • YASC schrieb:

    Huch?

    Naja, dann schreib einfach am Anfang

    const double PI = 3.141592654
    

    ok noch ein problem...scheint mi dem runden zu tun zu haben...
    so sieht die funktion jetzt aus:

    void drawPixels(int *array, int showblack = 1, int w = SWIDTH, int h = SHEIGHT, int x = 0, int y = 0, int rot2 = 0)
    {
    	if(rot2)
    	{
    		float rot = rot2 * 3.141592654/180;
    		float rM[2][2] ={{cos(rot),sin(rot)},{-sin(rot),cos(rot)}};
    		float ergebnis[2];
    		for(int j = 0; j<w; j++)
    		{
    			for(int i = 0; i<h; i++)
    			{
    				if(array[i+(j*h)] != 0 || showblack == 1)
    				{
    					int pixel[2] = {j-d2i(w/2),d2i(i-12)};
    					for (int k = 0; k < 2; k++) 
    					{ 
    						ergebnis[k] = 0; 
    						for (int l = 0; l < 2; l++) 
    							ergebnis[k] += rM[k][l] * pixel[l]; 
    					}
    					PUTPIXEL(d2i(ergebnis[0])+x+d2i(w/2),d2i(ergebnis[1])+y+d2i(w/2),array[i+(j*h)]);
    				}
    			}
    		}
    	}
    	else
    	{
    		for(int j = 0; j<w; j++)
    		{
    			for(int i = 0; i<h; i++)
    			{
    				if(array[i+(j*h)] != 0 || showblack == 1)
    				{
    					PUTPIXEL(j+x,i+y,array[i+(j*h)]);
    				}
    			}
    		}
    	}
    
    }
    

    allerdings gibts bei der rotation oft pixelfehler, dh kleine "lücken" und löcher

    hat jemand ne idee wie ich das verhindern kann? danke!



  • TGGC schrieb:

    Ich habe doch auch was ganz anderes gesagt! Du sollst für jeden Pixel im Zielbild eine Pixel aus dem Originalbild holen und nicht für jeden Pixel im Originalbild einem im Zielbild schreiben!

    Zu Matrix*Vektor siehe beliebiges Mathebuch.

    Bye, TGGC



  • life schrieb:

    TGGC schrieb:

    Ich habe doch auch was ganz anderes gesagt! Du sollst für jeden Pixel im Zielbild eine Pixel aus dem Originalbild holen und nicht für jeden Pixel im Originalbild einem im Zielbild schreiben!

    Zu Matrix*Vektor siehe beliebiges Mathebuch.

    Bye, TGGC

    achso jetzt versteh ich auch warum 😃

    boa kacke ich hab ka wie ich das denn machen soll 😞



  • *aggressiv werd* 😎

    Bye, TGGC



  • TGGC schrieb:

    *aggressiv werd* 😎

    Bye, TGGC

    häää?
    wenn ich ein quadratisches objekt rotiere werden doch seine dimensionen in x und y richtung grösser, wie soll ich denn die richtigen pixel abtasten? HILLLFEEE!!



  • Versuch doch mal für jeden Pixel aus dem Zielbild die Koordinaten zurückzudrehen und den Pixelwert mit den gedrehten Koordinaten aus dem Ursprungsbild zu nehmen

    hmmm.. 😕



  • YASC schrieb:

    Versuch doch mal für jeden Pixel aus dem Zielbild die Koordinaten zurückzudrehen und den Pixelwert mit den gedrehten Koordinaten aus dem Ursprungsbild zu nehmen

    hmmm.. 😕

    ja aber meine for schleife ist doch nur 25*25 und das bild selbst auch 25*25 wenn ich nun im zielbild 25*25 pixel abtaste und für jeden die koordinate abfrage, dann schneide ich doch die ecken ab?!



  • Wie wäre es wenn du nach den fast vergessenen Theorien eines Herren Pythagoras den Bereich einfach entsprechend erweiterst?

    Bye, TGGC



  • update2:

    if(rot2)
    	{
    		float rot = rot2 * -3.141592654/180;
    		float rM[2][2] ={{cos(rot),sin(rot)},{-sin(rot),cos(rot)}};
    		float ergebnis[2];
    		int nw = sqrt(w*w+h*h);
    		int nh = nw;
    		for(int j = 0; j<nw; j++)
    		{
    			for(int i = 0; i<nh; i++)
    			{
    					int pixel[2] = {j-d2i(nw/2),i-d2i(nh/2)};
    					for (int k = 0; k < 2; k++) 
    					{ 
    						ergebnis[k] = 0; 
    						for (int l = 0; l < 2; l++) 
    							ergebnis[k] += rM[k][l] * pixel[l]; 
    					}
    					int dx = d2i(ergebnis[0])+x+d2i(w/2);
    					int dy = d2i(ergebnis[1])+y+d2i(h/2);
    					PUTPIXEL(j+x,i+y,array[dy+(dx*h)]);
    			}
    		}
    	}
    

    bild nicht zentriert 😞

    maaan das ist ist 1. nicht zentriert und 2. gekachelt 😞



  • ok zentriert ist es jetzt
    ich weis ja woran die kachelung liegt, habe aber keine lösung ausser die maße des bildes zu vergrössern 😞



  • Die Zugriffe ausserhalb des Arrays solltest du besser lassen.

    Bye, TGGC


Anmelden zum Antworten