"Intelligente" skalierung im Diagramm?

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

Smily

Betreff: "Intelligente" skalierung im Diagramm?

BeitragDi, März 25, 2008 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi,
Ich stehe gerade etwas auf dem Schlauch bei einem Projekt und bräuchte mal einen kleinen Ansatz.

Und zwar geht es um ein Diagramm. Gegeben ist mir die Höhe in Pixel und der Höchste Y-Wert. (Das Diagramm kann Daten sowohl in Zahlendimensionen >1000 aber auch in Berreichen wie 0.01 anzeigen lassen. Je nach dem aktuellen Einsatz)

Nun soll ich eine möglichst intelligente Skalierung (also den Abstand zwichen den einzelnen zwichenschritten im Angezeigten Raster) finden. Leider habe ich bisher noch keine so richtigen ansätze gefunden. Kann mir da jemand mit einem kleinen Tip weiterhelfen pls?
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, März 25, 2008 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mal so ein Universal Digramm erstellt für so einen Contest, mal sehen ob ich es noch finde

Code: [AUSKLAPPEN]
Graphics 800,600
Dim FPS(4)
Dim geszaehl(90)
Menge= 8
Global MausX , MausY
For i=1 To 8 : Read geszaehl(i) : Next
Data 78 , 31, 14, 113, 58, 89, 51, 101

Win_X1= 50
Win_Y1= 50
Win_X2= 700
Win_Y2 = 500

SetBuffer BackBuffer()
While Not KeyDown(1)
   MausX = MouseX()
   MausY = MouseY()
   Text 9,9,"F1 = Hilfe"
   
   If KeyHit(57) Then Art = Art Xor 1
   
   Menge = Menge + KeyHit(61) - KeyHit(60)
      If Menge <  2 Then Menge =  2
      If Menge > 90 Then Menge = 90
      
   Win_X1= Win_X1+ (KeyDown(205) - KeyDown(203))
      If Win_X1< 0 Then Win_X1= 0
      
   Win_Y1 = Win_Y1 + ( KeyDown(208) - KeyDown(200))
      If Win_Y1 < 25 Then Win_Y1 = 25
      
   Win_X2 = Win_X2 + (KeyDown(32) - KeyDown(30))
      If Win_X2 + Win_X1> 799 Then Win_X1= Win_X1-1
      
   Win_Y2  = Win_Y2  + (KeyDown(17) - KeyDown(31))
      If Win_Y2  + Win_Y1> 599 Then Win_Y1= Win_Y1- 1
      
   Diagramm ( 1 , Menge , Win_X1, Win_Y1, Win_X2 , Win_Y2  , Art )
   Color $FF,$FF,$FF
   If KeyHit(59)
      Color Rand($FF),Rand($FF),Rand($FF)
      Rect 80,80,265,170
      Color 0,0,0
      Text 90,90,"Steuertasten = Verschieben"
      Text 90,110,"Space = Ansicht ändern"
      Text 90,130,"W A S D = Größe ändern"
      Text 90,150,"F2 - F3 = Spaltenanzahl ändern"
      Text 90,170,"ESC = Beenden"
      Text 90,190,"Maustasten  =  Werte ändern"
      Text 150,210,">>Taste<<"
      Flip
      WaitKey
   End If
   Color 0,0,0
   Rect MausX ,MausY ,5,5
   Color $FF,$FF,$FF
   Rect MausX ,MausY ,5,5,0
   Text 700,9,"FPS:"+FPS(1):FPS(2)=FPS(2)+1:If MilliSecs()>FPS(3)+999 Then FPS(1)=FPS(2):FPS(2)=0:FPS(3)=MilliSecs()
   Flip 0
   Cls
Wend
End
Function Diagramm ( ArrayVon, ArrayBis, WinStartX, WinStartY, BreiteX#, HoeheY#, Art )
   IndexMenge = ArrayBis - ArrayVon + 1
   For t= ArrayVon To ArrayBis
      If MaxWert < geszaehl(t) Then  MaxWert = geszaehl(t)
   Next
   SeedRnd(1)
   Select Art
   ::Case 0
      BalkenX = BreiteX / IndexMenge
      Rect WinStartX -1 , WinStartY -1, BalkenX * IndexMenge +1,HoeheY +2
      Factor# = HoeheY / MaxWert
      While IndexMenge > Zeiger
         Rx1 = Zeiger * BalkenX + WinStartX
         Rx2 = BalkenX - 1
         Ry2 = geszaehl( Zeiger + ArrayVon ) * Factor
         Ry1 = WinStartY + HoeheY - Ry2
         Color Rand($FF),Rand($FF),Rand($FF)
         Rect Rx1 , Ry1 , Rx2 , Ry2
         Color 0,0,0
         Text Rx1 + BalkenX / 2 + 1 , Ry1 + 1 , geszaehl( Zeiger + ArrayVon ) , 1
         Color $FF,$FF,$FF
         Text Rx1 + BalkenX / 2 , Ry1 ,geszaehl( Zeiger + ArrayVon ),1
         If RectsOverlap( Rx1 , WinStartY , Rx2 , HoeheY , MausX , MausY , 4, 4) Then
            Mf(Zeiger + ArrayVon)
         End If
         Zeiger = Zeiger + 1
      Wend
   ::Case 1
      BalkenY = HoeheY / IndexMenge
      Rect WinStartX - 1 , WinStartY-1 , BreiteX+2 , BalkenY * IndexMenge + 2 , 1
      Factor# = BreiteX / MaxWert
      While IndexMenge > Zeiger
         Rx1 = WinStartX
         Ry1 = WinStartY + Zeiger * BalkenY
         Rx2 = geszaehl( Zeiger + ArrayVon ) * Factor
         Ry2 = BalkenY - 1
         Color Rand($FF),Rand($FF),Rand($FF)
         Rect Rx1 ,Ry1 , Rx2 , Ry2 , 1
         Color 0,0,0
         Text Rx1 +1 , Ry1 + BalkenY/2 +1, geszaehl(Zeiger + ArrayVon),0,1
         Color $FF,$FF,$FF
         Text Rx1 , Ry1 + BalkenY /2, geszaehl(Zeiger + ArrayVon),0,1
         If RectsOverlap ( Rx1 + 1, Ry1 + 1, BreiteX ,Ry2 ,  MausX , MausY ,4 ,4) Then
            Mf( Zeiger + ArrayVon )
         End If
         Zeiger = Zeiger + 1
      Wend
   End Select
End Function

Function Mf(x)
   If MouseDown(1) Then geszaehl(x) = geszaehl(x) + 1
   If MouseDown(2) Then
      If geszaehl(x) > 0 Then
         geszaehl(x) = geszaehl(x) - 1
      End If
   End If
End Function


hab ihn doch gefunden, einfach mal ausprobieren mit F1 gibt es Hilfe
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group