Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Graph ausmessen ...
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 861
Wohnort: Ruhrpott

BeitragVerfasst am: 18.06.2014, 07:34    Titel: Antworten mit Zitat

Hallo allerseits! lächeln

Nils' Verständnisschwierigkeiten kommen vermutlich daher, daß nemored in seinem Beispielprogramm zwei Schritte gleichzeitig gemacht hat, nämlich das Auszählen der Pixel und deren Bewertung. Ich habe mir daher erlaubt, das Programm so umzuschreiben, daß die beiden Schritte getrennt werden.
Code:
Screen 12

Function f(x As Double) As Double
   f = Cos(x)
   'f = 1
End Function

Function f2(x As Double) As Double
   f2 = 1
End Function

Const pi As Double = Acos(0)*2
Dim x As Double
Dim y As Double
Dim start As Double
Dim ende As Double
Dim schritt As Double
Dim faktorX As Integer
Dim faktorY As Integer
Dim graphpixel As Integer
Dim rechteckpixel As Integer
Dim summe1 As Double

start = -pi/2
ende  =  pi/2
faktorX = 100
faktorY = 100
schritt = .001

Line (0, 240)-(639, 240), 2 'waagerecht
Line (320, 0)-(320, 479), 2 'senkrecht

'Graph zeichnen
For x = start To ende Step schritt
   y = f(x)
   PSet (320 + x*faktorX, 240 - y*faktorY),4
   summe1 = summe1 + y*schritt
Next

' Graph 'scannen' und Flächeninhalt aufsummieren
For x = 0 To 639
   For y = 240 To 0 Step -1
      If Point (x, y) = 4 Then
         graphpixel += 240 - y 'Anzahl der Pixel zwischen x-Achse und Graph
         Exit For
      End If
      If y = 0 Then 'Lücken im Graphen markieren
         Line (x,250)-(x,260)
      EndIf
   Next
Next

'Referenzrechteck zeichnen
Line (start * faktorX + 320,240)-(ende * faktorX + 320,240 - 1 * faktorY),14,B
'Flächeninhalt des Referenzrechtecks berechnen
rechteckpixel = Int((ende * faktorX + 320) - (start * faktorX + 320)) * faktorY

Print "Direktberechnung:      "; summe1
Print "vom Graphen abgelesen: "; pi*graphpixel/rechteckpixel
Locate 20,1
Print "Pixel unter Graph: ";graphpixel
Print "Pixel im Rechteck: ";rechteckpixel
Print "      Verhaeltnis:";graphpixel/rechteckpixel
Print " pi * Verhaeltnis:";pi*graphpixel/rechteckpixel

Sleep

Zunächst einmal wird nur die Anzahl der Pixel unter dem Graphen ermittelt. Da dieses Verfahren nur funktioniert, wenn der Graph keine Lücken hat, werden solche Lücken durch einen kurzen weissen Strich unter der x-Achse gekennzeichnet. Wenn unterhalb des Graphen solche Striche auftauchen, ist das Ergebnis unbrauchbar.

In dem modifizierten Beispielprogramm befinden sich zwischen Graph und x-Achse 19920 Pixel. Das ist zunächst einmal nur eine Zahl ohne allzuviel Informationswert. Aussagekräftig wird sie erst dadurch, daß man sie zu einer geeigneten Referenzfläche ins Verhältnis setzt. In unserem Fall bietet sich die Fläche des umschließenden Rechtecks an. Das Rechteck reicht von -Pi/2 bis Pi/2, hat also eine Breite von Pi. Mit 'faktorX' multipliziert ergibt das 314 Pixel. Die Höhe beträgt 1 (Radius des Einheitskreises) mal 'faktorY', also 100 Pixel. Somit hat die Referenzfläche eine Größe von 31400 Pixeln und repräsentiert den Wert Pi (Halbkreis entsprechend 1/2 Cosinuswelle). Der Rest ist ein simpler Dreisatz: Pi * 19920 / 31400 ergibt eine bewertete Fläche unter dem Graphen von 1,9930...usw.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz