Postet av: Svend Andreas Horgen Re: Kakediagram i kap 12.- er det helt riktig?
> Men hvis jeg f.eks. endrer $antall_enig = 9; blir diagrammet helt feil. "Vet ikke" forsvinner helt!
Hmmmmmmmmmmmm.....
> Er det jeg som har oversett noe helt logisk, eller er det en feil i scriptet?
Det er en feil i scriptet! Takk for du sa fra, dette har jeg ikke oppdaget.
Det er tilfeldig at scriptet fungerer med eksempelet som gitt i boka. Feilen ligger i de tre kallene til funksjonen imagefilledarc() (samt de tre i for-løkken)
Her er definisjonen på imagefilledarc()
imagefilledarc(
bildeid,
punktx,
punkty,
bredde,
hoyde,
STARTPUNKT GRADER,
SLUTTPUNKT GRADER,
farge,
stil
)
Altså trenger en et startpunkt, en bredde, en høyde, og så trenger en å vite hvor buen skal starte og hvor den skal stoppe. Disse to har jeg satt i stor skrift. Det er her feilen ligger, på start og stopp. Eksempelet i boka fungerer, men det er bare flaks. Problemet er at i boka er disse kalt opp slik:
imagefilledarc(
$bilde,
$radius,
$i,
$dia,
$radius,
0,
$forste,
$morkblaa,
IMG_ARC_PIE);
Dette er riktig, uansett skal første sirkelbue tegnes opp slik. Første del av sirkelen går fra grader 0 til grader $forste.
Videre:
imagefilledarc(
$bilde,
$radius,
$i,
$dia,
$radius,
$forste,
$andre,
$morkblaa,
IMG_ARC_PIE);
Dette er feil.
Tilsvarende for tredje del:
imagefilledarc(
$bilde,
$radius,
$i,
$dia,
$radius,
$andre,
$tredje,
$morkblaa,
IMG_ARC_PIE);
Også denne er feil.
Hvorfor?
Ser nå på start og slutt. Det er her nøkkelen ligger:
bue nr 1: 0 --> $forste
bue nr 2: $forste --> $andre
bue nr 3: $andre --> $tredje
Dette blir feil fordi: Bue nr 2 starter på $forste, og går til $andre. Det høres rett ut siden variablene heter det de heter, men egentlig har variablene innhold som gjenspeiler størrelsen i første og andre bue, og ikke startpunktet til de to buene. Verdi, ikke startpunkt, sagt kort.
Derfor må startpunkt for bue nr 2 regnes ut. Utregning her:
- Første bue starter i 0 og slutter i $forste (siden det er antallet).
- Andre bue starter i $forste, men slutter i ($forste + $andre), ikke bare i $andre.
- Tredje bue starter ikke i $andre, men i ($forste + $andre) og slutter ikke i $tredje, men i ($forste + $andre + $tredje)
Det riktige blir altså:
bue nr 1: 0 --> $forste
bue nr 2: $forste --> ($forste + $andre)
bue nr 3: ($forste + $andre) --> ($forste + $andre + $tredje)
Her er den riktige koden (med forbehold om feil :-)
//NR 1
imagefilledarc(
$bilde,
$radius,
$i,
$dia,
$radius,
0,
$forste,
$morkblaa,
IMG_ARC_PIE);
//NR 2
imagefilledarc(
$bilde,
$radius,
$i,
$dia,
$radius,
$forste,
($forste + $andre),
$morkblaa,
IMG_ARC_PIE);
//NR 3
imagefilledarc(
$bilde,
$radius,
$i,
$dia,
$radius,
($forste + $andre),
($forste + $andre + $tredje),
$morkblaa,
IMG_ARC_PIE);
Har testet, og det fungerer.
| |