Buchempfehlung
Visual Basic 6 Kochbuch
Visual Basic 6 Kochbuch
Viele praktische Tipps zum Programmieren mit Visual Basic 6, die sich oft auch auf FB übertragen lassen. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Mathematik

Liegt Punkt C auf Gerade AB?

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.Redakteurytwinky 06.12.2010

Jede Strecke in einer Ebene hat einen Anfangs- und einen Endpunkt.
Das ist nichts besonders Neues, aber kann erstmal so stehenbleiben..
Nun gibt es durchaus Fälle, in denen es interessant wäre, zu wissen(!!), ob ein
weiterer Punkt(aus derselben Ebene) auch auf dieser Geraden liegt. Mein altes
Pascal-Programm habe ich umgestrickt, damit es unter FreeBasic läuft und siehe da:
es läuft ;-))
Die Proberechnungen habe ich erstmal noch im Programm belassen, sie können aber auch
ganz einfach entfernt werden..
Die Entscheidung, wann ein Punkt auf einer Geraden liegt kann der Benutzer anhand der
Höhe h treffen, wenn h=0 ist, liegen die Punkte auf einer Geraden. Da die Berechnung aber mit Doubles erfolgt, ist es unwahrscheinlich, daß exakt Null herauskommt. Hier müssen
dann Fehlergrenzen festgelegt werden..
Viel Spaß dabei
Gruß
ytwinky

'+-----------------------------------------------------------------------------------+
'|    Header: Bestimmen der Übergabeparameter                                        |
'|    AnzeigeCheck:|Il1 sind Alt-0124, Großes i, kleines L, Eins „ä”öüáߎę֚Üñ±ø°¸©|
Const Author="HHFP.Bas v0.221 ¸2010 by ytwinky, MD"'                                 |
'|           (Tastenkombination: keine)                                              |
Const FBVer="Getestet mit FB " &__fb_version__ &" und dem aktuellen FBEdit"'|        |
'|    Zweck : Berechnung einer Höhe aus Koordinaten(ohne Winkelberechnungen..)       |
'+-----------------------------------------------------------------------------------+
'(Anmerkung zu den Sonderzeichen: zuerst steht das DOS-Zeichen, danach das Windowszeichen)
'A(60, 10), B(10, 10), C(35,35) =>p=25, q=25, h=25=h'
Type Real As Double
Type Punkt
    As Real r, h
End Type
Const False=0, True=Not False, Esc=!"\27"
'program hoehenfusspunkt;
Declare Sub HHFP(A As Punkt, B As Punkt, C As Punkt, byRef p As Double, byRef q As Double, byRef h As Double, byRef hp As Double)
Dim As Punkt A, B, C
Var p=0.0, q=0.0, h=0.0, hp=0.0, m="", z=5, s=18
Do
    Cls
    Print !"Berechnung von H”he und H”henfuápunkt\n" &Author
    Locate z-1, s
    Print "C";
    Locate z, s+1
    Print "ú";
    Locate z+1, s
    Print "/³\";
    Locate z+2, s-1
    Print "/ ³ \";
    Locate z+3, s-3
    Print "a/  ³h \b";
    Locate z+4, s-3
    Print "/   ³   \";
    Locate z+5, s-4
    Print "/ p  ³  q \";
    Locate z+6, s-7
    Print "B úÄÄÄÄÄúÄÄÄÄÄú A";
    Locate z+7, s+1
    Print "F";
    Locate z+8, s
    Print "-c-"
    Input "A(Rechts):", A.r
    Input "A(Hoch):", A.h
    Input "B(Rechts):", B.r
    Input "B(Hoch):", B.h
    Input "C(Rechts):", C.r
    Input "C(Hoch):", C.h
    HHFP(A, B, C, p, q, h, hp)
    Print "p=" &p
    Print "q=" &q
    Print "h=" & h &"h'(als Probe)=" & hp
    Print "Weitere Probe: c-p-q=0(Soll!!) c-p-q=" &(Sqr((A.r-B.r)^2+(A.h-B.h)^2)-p-q) &" (Ist)"
    Print "Ist h=0(oder in der N„he davon) liegen die Punkte auf einer Geraden..)"
    Print "Darf's noch was sein?(J/N):";
    Do
        m=""
        While m="":m=UCase(InKey):Wend
    Loop Until InStr("JN" &Esc, m)
    Print m
  Loop Until m<>"J"
End

Sub HHFP(A As Punkt, B As Punkt, C As Punkt, byRef p As Double, byRef q As Double, byRef h As Double, byRef hp As Double)
    Var ab=Sqr((A.r-B.r)^2+(A.h-B.h)^2), ac=Sqr((A.r-C.r)^2+(A.h-C.h)^2), bc=Sqr((B.r-C.r)^2+(B.h-C.h)^2)
  If bc>ac Then
    p=(ab*ab+bc*bc-ac*ac)/(2*ab)
    q=ab-p
    h=Sqr(bc*bc-q*q)
    hp=(ac*ac-p*p)/h
  Else
    q=(ab*ab+ac*ac-bc*bc)/(2*ab)
    p=ab-q
    h=Sqr(ac*ac-p*p)
    hp=(bc*bc-q*q)/h
  End If
End Sub

Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 06.12.2010 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 06.12.2010 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen