Schrijf een Bezier- functie voor het tekenen van bochten . De GD -functie bibliotheek niet een dergelijke functie niet onder , dus maak uw eigen ( zie Bronnen ) . De volgende functie maakt gebruik van de GD -functie " imagesetpixel , " die een pixel op de door de tweede en derde parameters coördinaten sets . De vierde parameter geeft de kleur en , zoals bij de meeste GD functies , de eerste parameter is een beeld identifier . Functie
Bezier ( & $ img , $ x , $ y , $ kleur , $ res ) { < br >
$ cx = 3 * ( $ x [ 1 ] - $ x [ 0 ] ) ;
$ bx
= 3 * ( $ x [ 2 ] - $ x [ 1 ] ) - $ cx ;
$ ax = $ x [ 3 ] - $ x [ 0 ] - $ cx - $ bx ;
$ cy = 3 * ( $ y [ 1 ] - $ y [ 0 ] ) ;
$ door = 3 * ( $ y [ 2 ] - $ y [ 1 ] ) - $ cy ;
$ ay
= $ y [ 3 ] - $ y [ 0 ] - $ cy - $ door ;
for ($ i = 0 ; $ i < = $ res ; $ i + + ) {
$ t = $ i /$ res ;
$ xt = $ ax * pow ( $ t , 3 ) + $ bx * pow ( $ t , 2 ) + $ cx * $ t + $ x [ 0 ] ;
$ yt
= $ ay * pow ( $ t , 3 ) + $ door * pow ( $ t , 2 ) + $ cy * $ t + $ y [ 0 ] ;
imagesetpixel
( $ img , round ( $ xt ) , round ( $ yt ) , $ kleur ) ;
}
}
3
initialiseren het beeld en de kleuren die je nodig hebt . In het volgende voorbeeld code , wordt de afbeelding geïnitialiseerd te zijn 200 bij 200 pixels , met behulp van de functie " imagecreate " , die ook zorgt voor het beeld identifier " $ img . " De kleuren rood en wit worden geïnitialiseerd met de functie " imagecolorallocate " onder vermelding van de waarden van 0 tot 255 voor rood , groen en blauw . De eerste kleur geïnitialiseerd zal de achtergrondkleur geworden
$ img = imagecreate ( 200 , 200 ) ; .
$ Wit = imagecolorallocate ( $ img , 255 , 255 , 255 ) ;
$ red = imagecolorallocate ( $ img , 255 , 0 , 0 ) ;
4
Maak twee arrays voor de x - en y - coördinaten van de vier punten die de vorm van het bepalen Bezier -curve . Om de vorm van de curve te geven , denken in termen van twee raakvectoren , waarvan de grootte bepaalt de hoeveelheid zwaaien richting van de vector heeft meer dan de curve , net als de baan van een vallende bal in een sterke wind . De eerste van de vier punten specificeert een van de eindpunten van de curve en de staart van de eerste vector en de tweede geeft het hoofd van de vector . De afstand tussen de punten is de omvang en hun relatieve positie bepaalt de richting . Het derde punt is het hoofd van de tweede vector en het vierde punt is de staart van de vector en het andere eindpunt .
In het volgende voorbeeld , de vier punten zijn ( 100 , 40 ) , ( 150 , -10 ) , ( 250 , 80 ) en ( 100 , 180 ) , waarbij de linkerbovenhoek van het beeld ( 0 , 0 ) . De x - coördinaten van de eindpunten beide 100 , waardoor ze gecentreerd in het doek van links naar rechts . De y - coördinaten dan het eerste eindpunt na 40 boven de ander op 180 . De vector koppen boven en rechts van de respectievelijke eindpunten . Scheid de x - en y - coördinaten in hun eigen arrays
$ x_coords = array ( 100 , 150 , 250 , 100 ) ;
$ y_coords = array ( 40 , -10 , 80 , 180 ) ;
5
Trek de kromme met het Bezier -functie gemaakt in stap 2 . In de voorbeeld -functie , de eerste parameter is het beeld identifier , de volgende twee parameters zijn de arrays voor de x - en y - coördinaten , de vierde is de kleur , en de laatste is de resolutie . De parameter resolutie bepaalt het aantal punten te worden uitgezet , dus geef grotere aantallen voor goed gedefinieerde curven . Typ bijvoorbeeld :
bezier ( $ img , $ x_coords , $ y_coords , $ rood , 500 ) ;
6
Redefine de coördinaten aan de bocht aan de linkerkant van tekenen het hart , en het plot met de Bezier -functie . De eindpunten van de bocht naar links zijn dezelfde als die voor de juiste . Het enige dat verandert is de x - coördinaten van de vector hoofden . De nieuwe vrijheid nodig hebben om links van het midden om zo het voorgaande zouden rechts van het midden , zodat elke kant om een spiegelbeeld van de andere soortgelijke . Typ bijvoorbeeld :
$ x_coords
[ 1 ] = 50 ;//First vector hoofd was 150
$ x_coords [ 2 ] = -50 ;//Second vector hoofd was 250 . .
bezier ( $ img , $ x_coords , $ y_coords , $ rood , 500 ) ;
7
Geef het beeld en het beeld object te vernietigen om vrij te maken van het geheugen . De functie " kop " is noodzakelijk, zodat de browser zal de output als een afbeelding te behandelen . Beëindig het bestand met het sluiten van de PHP -tag . Typ bijvoorbeeld :
header
( " Content - type: image /png " ) ;
imagepng
( $ img ) ;
imagedestroy
( $ img ) ; < br >
? >