Java Aufgabe

  • Hallo StageTwo !
    Ich komme bei dieser Aufgabe leider nicht weiter und ich hoffe das ihr mir helfen könnt :>





    Und das sind die Aufgaben:


    Ich brauche nur beim Punkt 4 Hilfe.
    Ich habe dort ein Problem mit der Drehung des Dreiecks.
    Man muss denke ich mal iwas mit Sinus und Cosinus machen, aber ich weiß nicht wie das gehen soll.


    Danke, Kuh. :P

  • ist der obrige code die reine Angabe, oder hast du das schon verändert?


    also wird der Igel durch ein Dreieck dasgestellt, dass in die richtung zeigt, in die der igel "schaut", und das dreieck, ist ein einstumpes Dreieck ...


    und der igel kann in sechs richtungen Laufen 0 ist oben, 3 ist unten? ...

  • Also so wie ich das verstanden habe, hast du eine x/y Koordinate und der Igel soll sich um 100 Pixel um 60 Grad verschieben?


    Dann müsste es damit gehen:


    deltaWeg sind die anzahl der Pixel, um die sich der Igel bewegen soll und winkel ist halt dein Winkel.


    double newX = deltaWeg * Math.cos(winkel / 360 * 2 * Math.PI);
    double newY = deltaWeg * Math.sin(winkel / 360 * 2 * Math.PI);

  • irgendwie kann ich grad an keine Lösung denken, auf die ein Normaler Mensch kommen würde... ;)
    edit: also für das gedehte zeichen des Dreiecks ...

  • Habs versucht.
    Geht nicht o. ich bekomms nicht hin.


    Noch jemand eine Idee?


    Ich muss das Dreieck um einen Punkt und um einen bestimmten Winkel drehen.

  • Wir haben mal in java was gedreht, ich such mal, ob ich das noch finde...


    Edit: probiers mal so:


    Code
    1. public void paint(Graphics x)
    2. {
    3. Graphics2D g2d = (Graphics2D)x;
    4. g2d.rotate(Math.toRadians(winkel),16,16);
    5. x.drawImage(img,6,0,this);
    6. }

    Dieser Beitrag wurde noch nie editiert, zuletzt von »hangman« (Heute , 13:37)



    1355?mode=raw


    Skill ist, wenn Luck zur Gewohnheit wird

  • zum bewegen der position (ohne das dreieck zu drehen) nimmst du


    public void vor ( int pdist )
    {
    double winkel = Math.PI*2*ri/6; //winkel in Radiant
    x = (int) (x + pdist*Math.sin(winkel));
    y = (int) (y - pdist*Math.cos(winkel));
    }


    versuch dass mal

  • Die Parameter musst du nochmal nachschlagen, ich glaub mein objekt war damals 16x16 Pixel groß.

    Dieser Beitrag wurde noch nie editiert, zuletzt von »hangman« (Heute , 13:37)



    1355?mode=raw


    Skill ist, wenn Luck zur Gewohnheit wird

  • Ja, ich hab das jetzt nur aus meinem alten Programm rauskopiert und mein Objekt war 16x16 Pixel groß. Das muss er eben anpassen. Aber so sollte es prinzipiell gehen. Falls es flackert, probiers mit Double Buffering.

    Dieser Beitrag wurde noch nie editiert, zuletzt von »hangman« (Heute , 13:37)



    1355?mode=raw


    Skill ist, wenn Luck zur Gewohnheit wird

  • Das von Xaw.4 klappt schon ganz gut, auch wenns etwas buggy ist.


    Hier ist die aktuelle Version:


    60°-Drehung geht gut.
    Aber bei 180°, also ri = 3, passt das alles nicht mehr.
    Dann zeichnet er einfach nach oben.


    Kuh :>

  • probiers mal mit dem graphic2d objekt und meinem vorschlag. das ging damals 100%ig

    Dieser Beitrag wurde noch nie editiert, zuletzt von »hangman« (Heute , 13:37)



    1355?mode=raw


    Skill ist, wenn Luck zur Gewohnheit wird

  • Achja
    rechts() geht auch kürzer

    Zitat

    rechts (int pwink){
    ri=(ri+pwink)%6}


    da freut sich der Lehrer, wenn du weißt was der modulo-operator ist, und fersuchst effizienter zu sein ;)


    edit: das blöde ist, dass bei deinem beispiel oben null ist, beim rumdenken mit cos/sin bin ich es gewohnt das der winkel null nach rechts zeigt... das verarscht mich immer ;)

  • Achja
    rechts() geht auch kürzer


    da freut sich der Lehrer, wenn du weißt was der modulo-operator ist, und fersuchst effizienter zu sein ;)


    Jo das hätte ich auch später noch gemacht, aber ich muss erstmal die großen Bugs beheben^^

  • auch klar ;)


    und


    60°-Drehung geht gut.
    Aber bei 180°, also ri = 3, passt das alles nicht mehr.
    Dann zeichnet er einfach nach oben.


    Kuh :>

    versteh ich nicht...
    ich hab mir da so ein testding gebaut (applets kann ich nicht - drum für swing ;)) und da gehts...


    edit:


    Versuchs mal hiermit



    public void zeichneDich ( Color c)
    {
    g.setColor ( c );


    int a = 10; //abstände
    double winkel = Math.PI*2*ri/6; // drehwinkel in radiant
    double sin=Math.sin(winkel);
    double cos=Math.cos(winkel); //aus Perfomancegründer schon vorher berechnet

    int p1x=(int) (x+ a*sin);
    int p1y=(int) (y- a*cos);


    int p2x=(int) (x- a*cos);
    int p2y=(int) (y- a*sin);


    int p3x=(int) (x+ a*cos);
    int p3y=(int) (y+ a*sin);


    g.drawLine ( p1x, p1y , p2x, p2y);
    g.drawLine ( p2x, p2y , p3x, p3y);
    g.drawLine ( p3x, p3y , p1x, p1y);
    }


    PS: ... warum die code-formatieung bei mir immer wieder faild wies ich nicht ;)