// Eva Lahnsteiner // 0406150 // Aufgabe 1147, Gerpunkt // Lage eines Punktes zu einer Geraden // 31.10.2004 ================================================= D O K U M E N T A T I O N Z U G E R P U N K T ================================================= 1) Kurzbeschreibung ------------------- Zwei Punkte, die eine Gerade definieren, sowie ein dritter Punkt werden eingelesen; die Lage des Punktes bezüglich der Geraden wird ermittelt und ausgegeben. 2) Eingabe ---------- - Koordinaten (Typ Float) x1, y1, x2, y2, x3, y3 der drei Punkte in dieser Reihenfolge einlesen - x1, y1 und x2, y2 definieren die Gerade - Koordinaten müssen im Bereich [-100,100] (inklusive) liegen; - Alle Punkte müssen paarweise voneinander verschieden sein. 3) Ausgabe ---------- - "LINKS" ausgeben, wenn der Punkt links der Geraden ist - "RECHTS" wenn er rechts der Geraden ist - "DARAUF" wenn er sich darauf befindet 4) Fehlerbehandlung ------------------- - Eingabedatensatz mit ungültigem Datentyp (z.B. Buchstabe) --> "?" mit Zeilenvorschub ausgeben - Eingabedatensatz ungültiger Wertebereich (z.B. < 100) --> "FALSCHE EINGABE" mit Zeilenvorschub ausgeben - Eingabedatensatz paarweise gleich mit anderem --> "FALSCHE EINGABE" mit Zeilenvorschub ausgeben --> keine weiteren Berechnungen! Programm endet! 5) Realisierung --------------- Variablendefinition ------------------- - Array "punkte" vom Typ "float" mit 6 Feldern steht für dir einzulesenden Koordinaten zur Verfügung - D1 und D2 sind Variablen in denen die Ergebnisse der Berechnung der Lage des Punktes gespeichert werden - EprogFehler wird auf "true" gesetzt falls ein Datentypsfehler auftritt - InhaltFehler wird auf "true" gesetzt falls z.B. ein Wert < 100 eingegeben wird - min = -100, max = 100 ... Koordinaten müssen in diesem Wertebereich liegen (>=-100, <=100) - v1, v2, v3 dienen als Zählvariablen und werden beim paarweisen Vergleich der Punkte gebraucht Einlesen der Koordinaten ------------------------ Zum Einlesen der Koordinaten wird eine for-Schleife verwendet. Sie läuft 6 mal durch und liest jede x- und y-Koordinate jedes Punktes ein. Jede dieser Koordinaten wird sofort auf den Wertebereich geprüft. Falls Wertebereich nicht übereinstimmt: InhaltFehler=true; Nach der Eingabe ist das Array folgendermaßen gefüllt: punkte [0] [1] [2] [3] [4] [5] ------------------------------- | x1 | y1 | x2 | y2 | x3 | y3 | ------------------------------- Paarweiser Vergleich -------------------- Die Prüfung erfolgt wiederum durch eine For-Schleife. Diese läuft 2 mal durch (1. Durchlauf j=2, 2.Durchlauf j=3) Beim 1. Durchlauf werden alle x-Koordinaten miteinander verglichen! Sie stehen wie die Darstellung oben zeig an den Positionen 0,2,4. //*********************************************** for (int j=2; j<=3; j++) { if (punkte[j-2]==punkte[j]) v1++; if (punkte[j-2]==punkte[j+2]) v2++; if (punkte[j]==punkte[j+2]) v3++; } if ((v1==2)||(v2==2)||(v3==2)) InputFehler=true; //*********************************************** 1. Durchlauf (Werte eingesetzt) j=2: if (punkte[0]==punkte[2]) v1++; <-- if (x1==x2) v1++; if (punkte[0]==punkte[4]) v2++; <-- if (x1==x3) v2++; if (punkte[2]==punkte[4]) v3++; <-- if (x2==x3) v3++; Somit sind alle x-Kombinationen abgehandelt. Bei einer Übereinstimmung 2er x-Koordinaten merkt man sich diesen Zustand in den Variablen v1,v2 oder v3, denn erst wenn die jeweiligen y-Koordinaten der Punkte auch übereinstimmen sind die beiden Punkte gleich! 2. Durchlauf (Werte eingesetzt) j=3: if (punkte[1]==punkte[3]) v1++; <-- if (y1==y2) v1++; if (punkte[1]==punkte[5]) v2++; <-- if (y1==y3) v2++; if (punkte[3]==punkte[5]) v3++; <-- if (y2==y3) v3++; Nach den 2 Schleifendurchläufen wird überprüft ob eine der Variablen v1,v2 oder v3 == 2 ist und falls dies der Fall ist, wird InhaltFehler auf true gesetzt, da es nicht erlaubt ist 2 identische Punkte einzugeben. Dh. wäre z.B. v1=2 wären die Punkte x1/y1 und x2/y2 identisch! InhaltFehler=true; Berechnung der Lage des Punktes ------------------------------- Wenn die Daten richtig eingegeben wurden erfolgt die Berechnung nach den Formeln: D = x1*y2 - x2*y1 D1 = x3*(y2-y1) + y3*(x1-x2) Für die jeweiligen Koordinaten (x1,y2 ...) steht im Code das Array mit der jeweiligen Postion der Koordinate. Wenn D1 "LINKS" ausgeben D1=D liegt der Punkt auf der Geraden --> "DARAUF" ausgeben D1>D liegt der Punkt rechts der Geraden --> "RECHTS" ausgeben