Kathetensatz und Satz des Pythagoras, Quelltext

 

 
// Java-Applet Pythagoras // Kathetensatz und Satz des Pythagoras // Kompilierung mit J2SDK 1.6.0 // Walter Fendt // 25.10.1997 - 30.03.2009
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Pythagoras extends JApplet implements MouseMotionListener {
//----------------------------------------------------------------------------- // Konstanten //-----------------------------------------------------------------------------
final Color FZF = Color.yellow; // Hintergrundfarbe Zeichenfläche final Color FARBE_DREIECK = Color.green; // Farbe für Dreieck final Color FARBE_RE = Color.blue; // Farbe für rechte Seite final Color FARBE_LI = Color.red; // Farbe für linke Seite final int XM = 200, YM = 150; // Mittelpunkt des Thaleskreises final int R = 50, R2 = 2*R; // Radius und Durchmesser final int XA = XM-R, XB = XM+R; // Endpunkte der Hypotenuse final Font SANSSERIF // Logischer Font = new Font("SansSerif",Font.BOLD,12);
//----------------------------------------------------------------------------- // Attribute //-----------------------------------------------------------------------------
Zeichenfläche zf; // Zeichenfläche int breite, höhe; // Abmessungen (Pixel) int x0, y0; // Scheitel des rechten Winkels Polygon dreieck; // Dreieck Polygon quadratLinks, quadratRechts; // Quadrate
//----------------------------------------------------------------------------- // Methoden //-----------------------------------------------------------------------------
// Start-Methode:
public void start () { Container cp = getContentPane(); // Container für Komponenten cp.setLayout(null); // Hartes Layout (Pixelangaben) Dimension dim = getSize(); // Abmessungen (aus HTML-Datei) breite = dim.width; // Breite (Pixel) höhe = dim.height; // Gesamthöhe (Pixel) zf = new Zeichenfläche(); // Zeichenfläche zf.setBackground(FZF); // Hintergrundfarbe Zeichenfläche zf.setBounds(0,0,breite,höhe); // Position/Abmessungen Zeichenfläche cp.add(zf); zf.repaint(); // Zeichenfläche hinzufügen und neu zeichnen dreieck = neuesPolygon(3); // Dreieck quadratLinks = neuesPolygon(4); // Kathetenquadrat links quadratRechts = neuesPolygon(4); // Kathetenquadrat rechts x0 = (int)(XM-0.6*R); // Scheitel des rechten Winkels, x-Koordinate y0 = (int)(YM-0.8*R); // Scheitel des rechten Winkels, y-Koordinate zf.addMouseMotionListener(this); // Aufpasser für Mausbewegungen }
// Erzeugung eines Polygons: // n ... Zahl der Ecken
Polygon neuesPolygon (int n) { Polygon p = new Polygon(); // Neues Polygon (mit 0 Ecken) for (int i=0; i<n; i++) // n Ecken hinzufügen p.addPoint(0,0); return p; // Rückgabewert (Referenz auf Polygon) }
// Setzen eines Punktes (Polygonecke): // p ...... Polygon // i ...... Index der Ecke // x, y ... Koordinaten
void setzenPunkt (Polygon p, int i, int x, int y) { p.xpoints[i] = x; p.ypoints[i] = y; }
// Aktualisierung der Polygone: // Die Ecken des rechtwinkligen Dreiecks und der beiden Kathetenquadrate // werden an die neuen Werte von x0 und y0 (Scheitel des rechten Winkels) // angepasst.
void setzenPolygone () { setzenPunkt(dreieck,0,XA,YM); // Dreieck setzenPunkt(dreieck,1,XB,YM); setzenPunkt(dreieck,2,x0,y0); int dx = x0-XA, dy = YM-y0; // Hilfsgrößen setzenPunkt(quadratLinks,0,XA,YM); // Linkes Kathetenquadrat setzenPunkt(quadratLinks,1,x0,y0); setzenPunkt(quadratLinks,2,x0-dy,y0-dx); setzenPunkt(quadratLinks,3,x0-dy-dx,YM-dx); dx = XB-x0; dy = YM-y0; // Hilfsgrößen ändern setzenPunkt(quadratRechts,0,x0,y0); // Rechtes Kathetenquadrat setzenPunkt(quadratRechts,1,XB,YM); setzenPunkt(quadratRechts,2,XB+dy,YM-dx); setzenPunkt(quadratRechts,3,x0+dy,y0-dx); }
// Reaktion auf Ziehen der Maus:
public void mouseDragged (MouseEvent me) { int x = me.getX(), y = me.getY(); // Position des Mauszeigers if (y > YM) y = YM; // Mauszeiger unterhalb der Hypotenuse double my = Math.atan2(YM-y,x-XM); // Mittelpunktswinkel x0 = (int)Math.round(XM+R*Math.cos(my)); // Neuer Scheitel y0 = (int)Math.round(YM-R*Math.sin(my)); zf.repaint(); // Neu zeichnen }
// Nicht benötigte Methoden von MouseMotionListener:
public void mouseMoved (MouseEvent me) {} public void mouseEntered (MouseEvent me) {} public void mouseExited (MouseEvent me) {} // ----------------------------------------------------------------
// Innere Klasse Zeichenfläche:
class Zeichenfläche extends JPanel {
// Grafik-Ausgabe: // g ... Grafik-Kontext
public void paint (Graphics g) { super.paint(g); // Hintergrund zeichnen setzenPolygone(); // Polygone aktualisieren g.setColor(FARBE_DREIECK); // Dreieck ausfüllen g.fillPolygon(dreieck); g.setColor(FARBE_LI); // Kathetenquadrat links ausfüllen g.fillPolygon(quadratLinks); g.fillRect(XA,YM,x0-XA,R2); // Rechteck links ausfüllen g.setColor(FARBE_RE); // Kathetenquadrat rechts ausfüllen g.fillPolygon(quadratRechts); g.fillRect(x0,YM,XB-x0,R2); // Rechteck rechts ausfüllen g.setColor(Color.black); // Ränder zeichnen g.drawPolygon(quadratLinks); g.drawPolygon(quadratRechts); g.drawRect(XA,YM,x0-XA,R2); g.drawRect(x0,YM,XB-x0,R2); g.drawArc(XA,YM-R,R2,R2,0,180); // Thaleskreis zeichnen g.setFont(SANSSERIF); // Copyright-Hinweis g.drawString("© W. Fendt 1997",breite-120,höhe-20); } } // Ende Zeichenfläche } // Ende Pythagoras
 

 

URL: http://www.walter-fendt.de/quelltexte/pythagoras_qt.htm
© Walter Fendt, 25. Oktober 1997
Letzte Änderung: 2. April 2009