C-Agramm

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

Kekskiller

Betreff: C-Agramm

BeitragSo, Jul 25, 2004 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte mir ein ganz nettes System für Hot-Bits Diagramm-Contest
ausgedacht, wollte aber meinen Kopf nicht bei solcher Konkurenz herhalten.
Und das Kernstück meiner Darstellungsfunktion war das sogenannte
C-Agramm. Heißt so, da das erste Bild davon wie en C aussah. Ich hab
hier euch mal ne simple, abgespeckte Verion hier reingestellt Very Happy .

Ist noch recht langsam, da ich da schlecht den werten Bresenham mit
einbeziehen konnte, aber naja, ist ja nicht für RealTimeEffekte da...
Das Beispiel ist auch nicht das gelbe vom Ei, aber zumindest ist die
Funktion für kreisrunde Ladebildschirme ganz nett.
BlitzBasic: [AUSKLAPPEN]
;C-Agramm-Funktion

;Kleine Kreis- und Prozent-Funktion.
;Kann mit Farben versehen und mit Maximal- und Einzel-Wertangabe versehen
;werden. Aus den Werten werden dann Prozente errechnet und im Kreis dargestellt.
;Naja, Schnickschnack eben :). Heißt übrigens C-Agramm, weil das erste "produktive"
;Bild davon wie ein C aussah ^_^ .

;Das ganz besteht aus einer Funktion namens DrawCAgram() mit folgenden Parametern:

;X# X-Position
;Y# Y-Position
;Teilwert# Der Teilwert des Maximalwertes
;Maximalwert# Maximalwert der Prozentberechnung
;Active Farbe Farbe für den Farbverlauf des Teilswertes
;Inaktive Farbe Farbe für die restlichen Teilwerte
;Kreis-Größe Größe des C-Agramms
;Liniendicke Dicke der Teilwert-Linien
;Rotations-Winkel Der Dreh-Winkel des C-Agramms

;Ansonsten gibt es noch eine Genauigkeitskonstante (genauigkeit#).
;Je kleiner sie ist, desto größer können die Kreise "lochfrei" gezogen werden.

;Würde mich über einen/eine Credit/Erwähnung bei Einsatz dieser Funktion freuen.

Const genauigkeit#=0.5

Function DrawCAgramm(x#,y#,part#,max#,colact,colnot,size#,thickness#,rotation=0)
thickness#=thickness#-1
size#=size#-1
pixelperdegree#=360/max#
painteddegree#=(pixelperdegree#*part#)
sinstart=rotation+1
sinend=rotation+Int(painteddegree#)
sinmax=rotation+360
widthstart#=size#-thickness#
LockBuffer GraphicsBuffer()
For widthcount#=widthstart# To size# Step genauigkeit#
For sincount=sinstart To sinmax
If sincount<=sinend Then drawcol=colact Else drawcol=colnot
px#=x#+Sin(sincount)*widthcount#
py#=y#+Cos(sincount)*widthcount#
If px#>=0 And py#>=0 And px#<=GraphicsWidth()-1 And py#<=GraphicsHeight()-1 Then
WritePixelFast px#,py#,drawcol
EndIf
Next
Next
UnlockBuffer GraphicsBuffer()
End Function

Beispiel (mit farbwerten):
BlitzBasic: [AUSKLAPPEN]
AppTitle "C-Agramm"
Graphics 320,240,16,1
SetBuffer BackBuffer()
ClsColor 255,255,255
Include "C-Agramm.bb"

Global Red=250,Green=200,Blue=150,Auswahl=0
Global duenn=LoadFont("Arial",15),dick=LoadFont("Arial",15,1)
Global TextPosition=GraphicsWidth()/2,HalbScreen=GraphicsHeight()/3

Repeat
Cls
If KeyHit(200) And Auswahl>0 Then Auswahl=Auswahl-1
If KeyHit(208) And Auswahl<2 Then Auswahl=Auswahl+1
If KeyDown(203) Then
Select Auswahl
Case 0:If Red>0 Then Red=Red-1
Case 1:If Green>0 Then Green=Green-1
Case 2:If Blue>0 Then Blue=Blue-1
End Select
ElseIf KeyDown(205) Then
Select Auswahl
Case 0:If Red<255 Then Red=Red+1
Case 1:If Green<255 Then Green=Green+1
Case 2:If Blue<255 Then Blue=Blue+1
End Select
EndIf
Select Auswahl
Case 0:DrawCAgramm(GraphicsWidth()/2,HalbScreen,Red,255,Rgb(Red,0,0),Rgb(128,128,128),30,8)
Case 1:DrawCAgramm(GraphicsWidth()/2,HalbScreen,Green,255,Rgb(0,Green,0),Rgb(128,128,128),30,8)
Case 2:DrawCAgramm(GraphicsWidth()/2,HalbScreen,Blue,255,Rgb(0,0,Blue),Rgb(128,128,128),30,8)
End Select
Color Red,Green,Blue:Rect TextPosition-20,HalbScreen+40,40,20,1
Color 255,255,255:Rect TextPosition,HalbScreen+67,80,40,1
Color 0,0,0
If Auswahl=0 Then SetFont dick Else SetFont duenn
Text TextPosition,HalbScreen+67,"Rot :"+Red,1
If Auswahl=1 Then SetFont dick Else SetFont duenn
Text TextPosition,HalbScreen+79,"Grün:"+Green,1
If Auswahl=2 Then SetFont dick Else SetFont duenn
Text TextPosition,HalbScreen+91,"Blau :"+Blue,1
Flip
Until KeyHit(1)

Function Rgb(r,g,b)
Return r Shl 16 Or g Shl 8 Or b
End Function

Ich hab noch ne Beta-Variante mit zwei verschiedenen Farbüberläufen
und Anti-Aliasing-Funktion, aber die muss noch ausgereift werden...

Travis

BeitragSo, Jul 25, 2004 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool, falls man mal irgendein Game hat, bei dem sich der Spieler eine Farbe aussuchen kann, wäre so eine Navigation doch mal ein cooler Gag.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

TheProgrammer

BeitragSo, Jul 25, 2004 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool.
Vieleicht könnte man den Kreis mit der Maus füllen.
Also, dass man die Maus im Kreis bewegt.
aktuelles Projekt: The last day of human being
 

Kekskiller

BeitragSo, Jul 25, 2004 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Muss mal gucken, ist ja nur die Malfunktion.
Bin gerade dabei, damit nen Farbauswahlbildschirm zu
machen, aber nicht so bescheuert wie im Beispiel 8) .
Dann kommt das als komplette Einfügefunktion für 2D
und 3D dar. Dann bekommt ihr auch Farbüberläufe Very Happy .

Markus2

BeitragMo, Jul 26, 2004 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm,
das ist aber mehr als lahm , kann es sein das du die
Pixel doppelt und dreifach malst das keine Lücken entstehen ?
Mit ner Funk. die ein Dreieck füllt könnte man es bestimmt
sehr viel schneller hin bekommen .
Aber egal , von der Idee her ganz gut Smile
 

Kekskiller

BeitragMo, Jul 26, 2004 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, hasst recht, gehe das mit Kommas durch ^_^ .
Ist auch nicht besonders optimiert...
Aber ich arbeite daran. Erstmal will ich noch etwas an
den Farben basteln. Muss das sowieso noch höllisch
verbessern. Aber besonders wird es ohnhin nicht werden.
Aber hey, warum prüf ich Demel nicht, ob schon ein Pixel
in der Farbe drunterliegt... Idee!

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group