[PHP] Lijn grafiek tekenen mbv GD lib

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Het is me na wat prutsen gelukt om mooie balk grafieken te tekenen, met headspace aan de bovenkant, verschillende kleurtjes,...

Nu wil ik een lijngrafiek tekenen hier loop ik echter tegen wat problemen aan:
1 ste probleem, de lijn grafiek moet altijd bij 0 beginnen mijn oplossing hiervoor:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for ($i = 0; $i < count($this->chartData); $i++){ // bars op grafiek tekenen
            if($i!=0){
                //calculate the bar height
                $lineHeight=($this->chartData[$i]/$this->highestValue*$this->height)-$this->chartHeadSpace;
                //now start drawing our lines
                $x1=($this->pointDistance/2)*$i;
                $y1=$this->chartData[$i-1]-$this->height;
                $x2=$this->pointDistance*($i+1);
                $y2=$this->chartData[$i]-$this->height;
                imageline($this->image,$x1,$y1,$x2,$y2,$this->barColor2);
            }else{
                //calculate the line height
        $lineHeight=($this->chartData[$i+1]/$this->highestValue*$this->height)-$this->chartHeadSpace;
                //first point HAS to start at 0... 
imageline($this->image,0,$this->height,$this->pointDistance/2,$this->height-$barHeight,$this->barColor2);
            }
        }


Het probleem waar eigenlijk steeds teg)en aan loop is de wiskundige logica.
De logica (volgens mij ;) )

Men begint bij 0 trekt een lijn tot de eerste waarde uit mijn gegevens array (met een afstand van de helft van de pointdistance), vervolgens een lijn trekken van de vorige waarde uit de array tot de nieuwe waarde uit de array,...

Alleen telkens loop ik vast met hoe ik de op de juiste x waarde moet beginnen, $i*pointDistance biedt geen oplossing aangezien er dan de helft vanaf valt uit mijn afbeelding.

Kan iemand mij op weg helpen met een wiskundig formuletje?

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
  • $lineHeight gebruik je helemaal nergens.
  • Noem variabelen gewoon $previous_x, $previous_y, $x en $y ipv $x1, $y1, $x2, $y2, als dat de bedoeling is, ivm duidelijkheid.
  • Dan merk je meteen dat je het vorige punt kan onthouden ipv elk punt 2x te bepalen
  • Teken het eerste lijntje voor de loop, maakt de loop helderder.
  • Werk met het handje een voorbeeld met een beperkt aantal punten uit en leg duidelijker uit wat er fout gaat.
  • Optimalisatie: count() loop conditie is een invariant, zet het buiten de loop cq. in de initialisatie, scheelt heel veel een count() aanroepen.
offtopic:
Deze lijst met tips geven was meer werk dan het geven van een handjevol regels supermooie O-) PHP code, maar het is de bedoeling dat je hier meer van leert. Hopelijk kunnen mensen zich inhouden deze tips niet in te koppen/voor te kauwen.

[ Voor 33% gewijzigd door Voutloos op 06-02-2008 10:03 ]

{signature}


Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Voutloos schreef op woensdag 06 februari 2008 @ 09:59:
  • $lineHeight gebruik je helemaal nergens.
  • Noem variabelen gewoon $previous_x, $previous_y, $x en $y ipv $x1, $y1, $x2, $y2, als dat de bedoeling is, ivm duidelijkheid.
  • Dan merk je meteen dat je het vorige punt kan onthouden ipv elk punt 2x te bepalen
  • Teken het eerste lijntje voor de loop, maakt de loop helderder.
  • Werk met het handje een voorbeeld met een beperkt aantal punten uit en leg duidelijker uit wat er fout gaat.
  • Optimalisatie: count() loop conditie is een invariant, zet het buiten de loop cq. in de initialisatie, scheelt heel veel een count() aanroepen.
offtopic:
Deze lijst met tips geven was meer werk dan het geven van een handjevol regels supermooie O-) PHP code, maar het is de bedoeling dat je hier meer van leert. Hopelijk kunnen mensen zich inhouden deze tips niet in te koppen/voor te kauwen.
bedankt ;) is ook niet de bedoeling dat iemand de complete oplossing post, anders kan ik net zo goed een bestaande class gebruiken :) ik ga er even mee aan de slag

Modelbouw - Alles over modelbouw, van RC tot diorama