Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

Drehbares 9-Eck

Diskussion: Drehbares 9-Eck im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Folgende Aufgabe wurde von hellboy19 gestellt: 1) Schreibe ein Programm wo mit Hilfe von Polygonen ein 9-Eck gezeichnet wird ...

Antwort
Alt 05.01.07, 15:27   #1 (permalink)
Member of Honour
 
Benutzerbild von ivegotmail
 
Registriert seit: 28.05.03
ivegotmail Leistung: Z3
Likes: 1
Standard Drehbares 9-Eck

Anzeige

Folgende Aufgabe wurde von hellboy19 gestellt:

1) Schreibe ein Programm wo mit Hilfe von Polygonen ein 9-Eck gezeichnet wird
2) Mit einem Linksklick soll es anfangen sich langsam nach links zu drehen. Je öfter man klickt, desto schneller wird die Drehung.
3) Bei einem Rechtsklick soll es widerum langsamer werden (also wie beim schneller werden, jeöfter man klickt) bzw sich (nach dem Stillstand) nach rechts drehen.

Anstatt Links- oder Rechtsklick können natürlich auch irgendwelche Butons o.ä. verwendet werden.

__________________
http://livehabo.hackerboard.de | http://livebb.sourceforge.net
ivegotmail ist offline   Mit Zitat antworten
Alt 13.01.07, 15:01   #2 (permalink)
 
Registriert seit: 01.11.03
lagalopex Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von ivegotmail
In diesem Forum werden in unregelmäßigen Abständen neue Programmieraufgaben gestellt, die von euch gelöst werden sollen.

Die Aufgaben werden meist so gestellt sein, dass sie mit einer beliebigen Programmiersprache gelöst werden können. Das heißt wir programmieren hier keine 3D-Engines, sondern konzentrieren uns eher auf mathematische oder ähnliche Probleme die euer Hirn etwas fordern.
*ohne worte*
lagalopex ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 13.01.07, 15:10   #3 (permalink)
 
Registriert seit: 20.11.05
CraHack Leistung: Facit NTK
Likes: 0
Standard

Wo ist das Problem? Es geht hier um die Mathematik die dahinter steckt.
CraHack ist offline   Mit Zitat antworten
Alt 13.01.07, 15:46   #4 (permalink)
 
Registriert seit: 01.11.03
lagalopex Leistung: Facit NTK
Likes: 0
Standard

Abgesehen davon das ein 9-Eck (genauso wie ein Dreieck, Viereck,...) ein Polygon ist und das eine solche Darstellung nur mit einer 3D-Engine möglich ist, bzw man sie dann selber schreiben müsste (wenns um die Mathematik geht)...
lagalopex ist offline   Mit Zitat antworten
Alt 13.01.07, 16:08   #5 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Lightbulb

Ein drehendes Polygon braucht doch keine 3D-Engine... läuft schließlich alles in einer Ebene ab
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Alt 13.01.07, 16:10   #6 (permalink)
 
Registriert seit: 01.11.03
lagalopex Leistung: Facit NTK
Likes: 0
Standard

sehr witzig
Aber wo soll das mathematische Problem sein? Wenn es ja nicht um die Grafik geht...

Wenn es um die Mathematik ginge, wäre die Aufgabenstellung anders. Es ist nämlich egal, wie "schnell" es sich dreht. Es wäre gegeben, um welchen Punkt es sich dreht und ob es sich in der Ebene oder im Raum dreht. Und vor allem wäre es egal ob 9-Eck oder Gerade und die Grafik wäre überflüssig...
lagalopex ist offline   Mit Zitat antworten
Alt 13.01.07, 17:29   #7 (permalink)
 
Registriert seit: 02.01.06
Digi Leistung: Facit NTK
Likes: 0
Standard

Es ist ja auch nur Schwierigkeitsstufe 1, und für Anfänger keine schlechte Aufgabe. Schon wie man die Animation unabhängig von der Framerate macht bereitet einigen Probleme. Dazu noch Sinus/Cosinus, verschachtelte For-Schleife und Mauseingabe Auswertung.
Die mathematischen Probleme sind Sin/Cos und die Drehung des 9-Ecks.
Digi ist offline   Mit Zitat antworten
Alt 14.01.07, 23:38   #8 (permalink)
fetzer
Guest
 
Likes:
Standard

Ich zitiere auch einmal:

"beliebige programmiersprache"

Das heisst für mich, dass ich jede Sprache verwenden kann, die ich kenne. In PHP ist dies meiner Meinung nach nicht möglich. Bei dieser Aufgabe geht es ganz klar um das Programmieren einer Oberfläche, die auf Ereignisse reagiert, somit werden schon einige Sprachen ausgeschlossen. Mathematisch mag es ja sein, genauso wie die Einstufung "Schwierigkeit 1", allerdings, wie gesagt, ist es nicht mit jeder Sprache lösbar.

Aber trotzdem nette, einfache Aufgabe. Werde mich bei Zeit mal dransetzen und mich in java dran versuchen.
  Mit Zitat antworten
Alt 15.01.07, 12:23   #9 (permalink)
 
Registriert seit: 08.12.04
freak4fun Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von fetzer Das heisst für mich, dass ich jede Sprache verwenden kann, die ich kenne. In PHP ist dies meiner Meinung nach nicht möglich.
Wie kommst du denn darauf? Klar kann man mit php Bilder erstellen! Da kann man dann auch Poligone verwenden.

MfG
freak
freak4fun ist offline   Mit Zitat antworten
Alt 15.01.07, 14:02   #10 (permalink)
fetzer
Guest
 
Likes:
Standard

Zitat:
Original von freak4fun
Zitat:
Original von fetzer Das heisst für mich, dass ich jede Sprache verwenden kann, die ich kenne. In PHP ist dies meiner Meinung nach nicht möglich.
Wie kommst du denn darauf? Klar kann man mit php Bilder erstellen! Da kann man dann auch Poligone verwenden.

MfG
freak
Und jetzt dreh das ganze bitte mal, wenn die rechte Maustaste gedrückt wird
  Mit Zitat antworten
Alt 15.01.07, 14:10   #11 (permalink)
 
Registriert seit: 08.12.04
freak4fun Leistung: Facit NTK
Likes: 0
Standard

Ich bin dabe, ist aber gar nicht so einfach. Ich übergebe dem Bild dann den startparameter und dann dreht sich das Polygon entsprechend. (Oder sollte zumindest ).

MfG
freak
freak4fun ist offline   Mit Zitat antworten
Alt 15.01.07, 14:55   #12 (permalink)
HKA
 
Registriert seit: 15.10.06
HKA Leistung: Facit NTK
Likes: 0
Standard

So schwer ist das nicht die Matrizenformeln und Starhlensätze gibts haufenweise im I-net man muss sie nurnoch in ein Programm umsetzen. Ich seh in der Aufgabe kein Problem.

MFG -=HKA=-
HKA ist offline   Mit Zitat antworten
Alt 17.02.07, 16:56   #13 (permalink)
 
Benutzerbild von Eydeet
 
Registriert seit: 14.04.06
Eydeet Leistung: Facit NTK
Likes: 4
Standard

So, ich hab endlich mein erstes Java-Programm (eigentlich ist es ein Applet) fertig
Im Zip-Archiv befinden sich Quellcode, HTML-Datei und Applet.

Wenn man in den rechten Teil des Fensters klickt, dreht sich das ganze schneller nach links (bzw. langsamer nach rechts), im linken Teil andersherum.

neuneck.java   
Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class neuneck extends Applet implements Runnable, MouseListener
{
    int[] polyx = {0,0,0,0,0,0,0,0,0};
    int[] polyy = {0,0,0,0,0,0,0,0,0};
    int wpos;
    int add = 0;
    int speed = -1;
    private Image dbImage;
    private Graphics dbg;

    public void init()
    {
        setBackground(Color.white);
        addMouseListener(this);
    }

    public void start()
    {
        // Schaffen eines neuen Threads, in dem das Spiel läuft
        Thread th = new Thread(this);
        th.start();
    }

    public void stop()
    {
    }

    public void destroy()
    {
    }

    public void run()
    {
        while(true)
        {
            wpos = 0;
            add += speed;

            for(int i=0; i<9; i++) {
                polyx[i] = 200 + (int)(Math.sin(Math.toRadians(wpos+add)) * 100);
                polyy[i] = 200 + (int)(Math.cos(Math.toRadians(wpos+add)) * 100);

                wpos += 40;
            }

            repaint();

            try {
                Thread.sleep(50);
            } catch(InterruptedException e) {
                // do nothing
            }
        }
    }

    public void paint(Graphics g)
    {
        g.drawPolygon(polyx, polyy, polyx.length);
        g.drawString("Rechts", 100, 100);
        g.drawString("Links", 270, 100);
    }

    public void update(Graphics g)
    {
        if(dbImage == null) {
            dbImage = createImage(400, 400);
            dbg = dbImage.getGraphics();
        }

        dbg.setColor(getBackground());
        dbg.fillRect(0, 0, 400, 400);

        dbg.setColor(getForeground());
        paint(dbg);

        g.drawImage (dbImage, 0, 0, this);
    }

    public void mouseClicked(MouseEvent e)
    {

    }

    public void mouseEntered(MouseEvent e)
    {

    }

    public void mouseExited(MouseEvent e)
    {

    }

    public void mousePressed(MouseEvent e)
    {
        if(e.getX() < 200)
            speed--;
        else
            speed++;
    }

    public void mouseReleased(MouseEvent e)
    {

    }

    public void mouseMoved(MouseEvent e)
    {
    }

    public void mouseDragged(MouseEvent e)
    {
    }
}
Angehängte Grafiken
Dateityp: png screenshot.png (1,4 KB, 756x aufgerufen)
Angehängte Dateien
Dateityp: zip neuneck.zip (2,6 KB, 76x aufgerufen)
Eydeet ist offline   Mit Zitat antworten
Alt 07.07.07, 18:31   #14 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Die Logik hier ist eigentlich auch ganz einfach. Man braucht die 9 Punkte nur mit sinus bzw. cosinus rotieren lassen und Linien dazwischen einzeichnen.
mauralix ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » Drehbares 9-Eck
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61