Global _X.l, _Y.l, xaufl.l, yaufl.l ;TITLEW #1," 3D Balkengraphik " ;OPENW #1,0,0,_X,_Y,-1 ;xaufl%=_X-8,yaufl%=_Y aw=4 ; Anzahl der Werte pro Monat am=12 ; Anzahl der Monate min=10 ; Minimum der Werte max=110 ; Maximum der Werte Dim x1(4) Dim y1(4) Dim x2(4) Dim y2(4) Global Dim werte(am,aw) Dim monat(am) For i=1 To am monat(i)=i Next i For i=1 To am For j=1 To aw ; werte(i,j)=Random(max%+min%) Next j Next i Procedure xkord(x,z,w,tt) tt=(xaufl/14*x)+(yaufl/18*z)*Cos(w) EndProcedure Procedure ykord(y,z,w,tt) tt=(yaufl-15)-y-(yaufl/18*z)*Sin(w) EndProcedure Procedure drawit() ; DEFMOUSE 2 xaufl=_X-8 : yaufl=_Y ; Skalierung bs=xaufl/30 ; Breite der Balken (einschliesslich Zwischenraeume) w=55 ; Sichtwinkel (siehe Parallelprojektion) x=0 ; X-Start der vertikalen Einteilung x2=11.5 ; X-Ende der vertikalen Einteilung z=8 ; Z-Achsenabschnitt der vertikalen Einteilung z1=1 ; Z-Achsenstart FrontColor(RGB(220,0,0)) ; Gitternetz-Farbe For i=yaufl/2 + yaufl/20 To 0 Step -20 xkord(x,z,w,xs) ; Zeichnen der horizonzalen Einteilung ykord(i,z,w,ys) ; hintere Wand xkord(x2,z,w,xe) LineXY(xs,ys,xe,ys) xkord(x,z1,w,xs) ; und seitliche Wand xkord(x,z,w,xe) ykord(i,z1,w,ys) ykord(i,z,w,ye) LineXY(xs,ys,xe,ye) Next i y1=0 ; Y-Achsenstart y2=yaufl/2+yaufl/20 ; Y-Achsenende z1=1 ; Z-Achsenstart z2=8 ; Z-Achsenende For i=0.5 To 11.5 xkord(i,z1,w,xs) ; Zeichnen der vertikalen Einteilungen xkord(i,z2,w,xe) ; auf der hinteren Wand ykord(y1,z1,w,ys) ykord(y1,z2,w,ye) LineXY(xs,ys,xe,ye) xkord(i,z2,w,xs) ; und auf der unteren Wand ykord(y1,z2,w,ys) ykord(y2,z2,w,ye) LineXY(xs,ys,xs,ye) Next i x=0 : y=0 : y1=0 : y2=yaufl/2+yaufl/20 For i=8 To 1 Step -1 xkord(x1,i,w,xs) ; Zeichnen der horizontalen Einteilung auf der ykord(y,i,w,ys) ; unteren Wand xkord(x2,i,w,xe) LineXY(xs,ys,xe,ys) xkord(x,i,w,xs) ; und der vertikalen Einteilung auf der xe=xs ; seitlichen Wand ykord(y,i,w,ys) ykord(y2,i,w,ye) LineXY(xs,ys,xs,ye) Next i ; Zeichnen der Balken For i=0 To am-1 ; Für 12 Monate For j=aw To 1 Step -1 ; mit aw% Werten pro Monat y=werte(i+1,aw-j+1)*(yaufl/2/max) xkord(i,j,w,xs) ; linke, obere Ecke des Balkens ykord(0,j,w,ys) xkord(i,j,w,xe) ; rechte, untere Ecke des Balkens xe+bs ykord(y,j,w,ye) FrontColor ;COLOR 14,1 ;DEFFILL 8 x1(0)=xs+1 ; dann den "Kopf" des Balkens y1(0)=ye-1 ; zeichnen. Da dies ein x1(1)=xs+9 ; Parallelogramm ist, muá dafuer y1(1)=ye-9 ; die Polyfill-Routine hinzu- x1(2)=xs+9+bs-2 ; gezogen werden y1(2)=ye-9 x1(3)=xs+bs-1 y1(3)=ye-1 x1(4)=xs+1 y1(4)=ye-1 COLOR 1+j DEFFILL j POLYFILL 5,x1(),y1() PBOX xs+1,ys+1,xe-1,ye-1 ; den eigentlichen Balken zeichnen x2(0)=xs+9+bs-2 ; Balken 3D y2(0)=ye-9 x2(1)=xs+9+bs-2 y2(1)=ys-9 x2(2)=xs+bs-1 y2(2)=ys+1 x2(3)=xs+bs-1 y2(3)=ye-1 x2(4)=xs+9+bs-2 y2(4)=ye-9 COLOR 12 DEFFILL 8 POLYFILL 5,x2%(),y2%() Next j% COLOR 1,14 TEXT xs,ys+24,STR$(monat%(i%+1),2,0) Next i% DEFMOUSE 0 KILLEVENT EndProcedure DO GETEVENT e%=MENU(1) EXIT If e%=4 SWITCH e% Case 21,18 CLS drawit ENDSWITCH LOOP ; IDE Options = PureBasic v4.02 (Windows - x86) ; CursorPosition = 90 ; FirstLine = 72 ; Folding = -