Linien in 2.5D

P

pappawinni

Gast
Background
Vor Jahren habe ich einmal eine Application unter Excel-VBA (Visual Basic) geschrieben, die letztlich mit Excel garnichts zu tun hatte. Excel diente letztlich nur als Programmierumgebung.
Ich war dann auf der Suche nach einer unabhängigen, kostenlosen Basic-Alternative und war dann bei KBasic gelandet, hatte dann mit sehr hohem Zeitaufwand meine Application portiert, bin damit aber nicht glücklich geworden, weil das Programm nie stabil lief. Abstürze zu beliebigen Zeitpunkten, oder auch nicht. Meine Anwendung reitet also weiterhin auf Excel.
Jetzt will ich es mit Java versuchen. Vielleicht hätte ich das gleich tun sollen, aber ich bin eher die lineare Programmierung gewohnt und tu mir schwer damit, sinnvolle Klassen zu definieren.
Die Aufgabe
Um mich der Sache zu nähern, möchte ich zunächst verschiedene ebene Geometrien räumlich bewegen und darstellen, wie ich das z.B. in KBasic zum Einstieg ebenfalls gemacht hatte:
download.php

Beispielsweise möchte ich einen Kreis aus Linien in der Ebene berechnen, anschliessend eine Kopie davon um z.B. 10 Grad um die Vertikale drehen, die nächste Kopie um 20 Grad usw.
Alles zusammen soll dann auch als gemeinsames Gebilde aufgefasst und räumlich gedreht und dargestellt werden können.
Das gäbe also dann eine Art 2.5D, weil 2dimensionale Elemente 3dimensional bewegt würden.
Die Mathematik ist dabei, wie gesagt, nicht das Thema, sondern vielmehr die Frage, wie dazu Klassen, Interfaces und Methoden sinnvoll organisiert werden.
Ich hoffe mich einigermassen verständlich ausgedrückt zu haben und bitte um Anregungen.
Danke.
 

Marco13

Top Contributor
Hm... Da gibt's erstmal ZU viele Möglichkeiten, als dass man "die" Antwort geben könnte. Es gibt schon einige Klassen die da hilfreich sein könnten, aber bei bestimmten Zielen würde man die Klassen vielleicht anders angehen.
Aber erstmal vorneweg: Wie hast du dann vor, das ganze auf den Bildschirm zu bringen? Mit reinen 2D-Zeichenmethoden (Swing?)
 
P

pappawinni

Gast
Ja, also bei dem KBasic hatte ich auch nur 2D Lines zur Verfügung
(bzw. nur 2D Lines benutzt) weil ich die einfachste Uralt-Basic kompatible Ausgabemöglichkeit genutzt habe, wofür kein Formular oder dgl. erzeugt werden musste.
Ob ich da in Java jetzt Awt oder Swing brauche? Keine Ahnung, da steh ich noch völlig im Dunkeln, da les ich dann vllt. mal in meinem dicken Buch oder du gibst mir einen Tip?
 
Zuletzt bearbeitet von einem Moderator:

Scarabol

Mitglied
Coole Sache,

schau dir mal Graphics an, damit bekommst du alle simplen Zeichenfunktionen geliefert.

Zum Thema Klassendesign kann ich nur sagen, dass es mir da genau wie dir geht, hab auch mal mit Basic angefangen und das verwirrt mich heute immer...

Gruß
Scarabol
 

Marco13

Top Contributor
J
Ob ich da in Java jetzt Awt oder Swing brauche?

Darum ging es weniger - AWT ist "veraltet", wenn dann würde man Swing verwenden. Aber es gibt ja noch die GANZ andere Kategorie, nämlich sowas wie OpenGL (mit JOGL oder LWJGL). Mir ist eben nicht ganz klar, was das für ein Progamm sein soll, wenn es "fertig" ist (schon ob der Schwerpunkt auf geometrischen Berechnungen oder auf Zeichnungen liegen soll, oder beides oder wie oder was...)
 
P

pappawinni

Gast
Wie ich auch schon sagte, geht es mir nicht direkt um die endgültige Application, sondern um einen Teilaspekt.
Es genügt also zunächst vollkommen, wenn genau das möglich ist, was auf dem eingestellten Bild zu sehen ist. Linien, die sich durch bestimmte Benutzeraktionen (in KBasic war das die Betätigung bestimmter Tasten) in verschiedene Richtung "räumlich" drehen. Nicht mehr und nicht weniger.
Wenn ich das schon nicht lösen kann, dann brauch ich über Java garnicht weiter nachzudenken.

Und ja, wenn du so willst ist der Schwerpunkt der Anwendung letztlich die geometrische Berechnung mit der Zeichnung.
Der Schwerpunkt der Frage geht aber eher in Richtung Konzept.
Welche Klassen brauch ich im Beispielfall?
Sagen wir ich hab als geometrische Elemente Kreise (aufglöst in Linien), Rechtecke, vielleicht auch Pfeile (für die Koordinatenachsen wär das doch nett).
Mach ich daraus entsprechende Klassen ? welche Methoden brauchen die? Brauch ich irgendwie Interfaces?
Ich hab keine Ahnung von wo ich den Gaul aufzäumen soll.
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Nun... wenn du jemandem einen Screenshot zeigst, und fragst: "Wie macht man das am besten?" und derjenige antwortet "Das macht man am besten so-und-so..." ... DANN solltest du mißtrauisch werden ;)

Sagen wir ich hab als geometrische Elemente Kreise (aufglöst in Linien), Rechtecke, vielleicht auch Pfeile (für die Koordinatenachsen wär das doch nett).
Mach ich daraus entsprechende Klassen ? welche Methoden brauchen die? Brauch ich irgendwie Interfaces?
Ich hab keine Ahnung von wo ich den Gaul aufzäumen soll.

Allgemein empfiehlt es sich, erstmal alles mit Interfaces zu beschreiben. Damit kann man schon viel planen: Man macht sich klar, welche Methoden man braucht, und welche Vererbungen. Ich finde es auch immer sehr hilfreich, Code hinzuschreiben, wo man sieht, wie man etwas verwenden will. Also quasi Pseudocode
Java:
Circle circle = create(center, radius);
Circle rotatedCircle = circle.rotate(axis, angle);

// Dieser Beisatz "aufgelöst in Linien"  von oben sagt ja schonmal einen Menge aus:
for (each segment of rotatedCircle)
{
    drawLine(segment);
}

Daraus ergeben sich direkt Anforderungen: Ein Circle besteht aus einem Punkt und einem Radius, und er muss eine Methode haben, die eine Achse und einen Winkel übergeben bekommt, und einen rotierten Circle zurückgibt. Man muss auch irgendwie die Segmene abholen können. Als Punkte? Punkt-Paare? Linien? Natürlich muss (kann? sollte?) man sich über solche Strukturen sehr genau Gedanken machen, aber... man könnte übertrieben pragmatisch jetzt schon anfangen
Java:
interface Circle
{
    Point3D getCenter();
    double getRadius();

    Circle rotate(Axis axis, double angle);
    List<Segment> getSegments();  
    ...
}
und überlegen, ob das so passt, und wie andere Interfaces (Rechteck, Pfeil, Linie...) aussehen könnten.

Du könntest dir mal das Shape (Java Platform SE 6) ansehen. Das ist ein Interface, für das es verschiedene Implementierungen gibt, z.B. Ellipse2D (Java Platform SE 6) oder auch eine einfache Line2D (Java Platform SE 6) . (allerdings ist das alles nur 2D - wenn man "sowas ähnliches" in 3D machen würde, würde man wohl mit einem 3D-Punkt anfangen (das kann schon schwierig sein - nicht rein technisch, sondern philosophisch)). Dort gibt es das Konzept vom "PathIterator" - also irgendwas, wo man entlanglaufen kann, und Segmente (bzw. Punkte) bekommt. Das funktioniert bei einem Kreis, bei einem Rechteck, bei einer Linie.... Ob sowas hier Sinn machen könnte, musst du dir aber überlegen.
 
P

pappawinni

Gast
Danke,
Jetzt werd ich dann mal schauen, wie und womit ich überhaupt irgendwohin irgend eine Linie zeichnen kann.
Wenn ich in dem Tempo weiter mache, dann hab ich das Beispiel schon in einem Jahr :)
 

Scarabol

Mitglied
Hi,

um eine Linie zu zeichnen:
Java:
class MyClass extends JFrame {

public MyClass() {
this.setPreferredSize(new Dimension(400, 400));
this.setVisible(true);
}

@Override
public void paint(Graphics g) {
g.setColor(new Color(255, 0, 0));
g.drawLine(10, 10, 100, 100);
}

}

Gruß
Scarabol
 

Ähnliche Java Themen

Neue Themen


Oben