Fiz um plano cartesiano para desenhar retas, porém estou com o seguinte problema: não consigo variar a posição da reta. Vou colocar meu código e abaixo explico melhor.
<?php Header("Content-type: image/png"); $Width=541; $Height=541; //cria uma imagem com as proporções passadas pelas variáveis $img = ImageCreateTrueColor($Width, $Height); //Aloca cor para o preenchimento da imgem $bg = imagecolorallocate($img, 255, 255, 255); // Utiliza o padrão R.G.B de cor (red, green, blue) nesta ordem. imagefill($img, 0, 0, $bg); $fg = imagecolorallocate($img, 255, 0, 0); imagefill($img, 0, 0, $bg); //Aloca cor para a grade a ser desenhada $grid = imagecolorallocate($img, 256, 245, 249); //Aloca cor para o retangulo da borda $borda = imagecolorallocate ($img, 0, 0, 0); //Agrega estilos ou cores definidas anteriormente no código intercalando seus pixels em um mesmo desenho (faz uma mistura de cores) imagesetstyle($img, array($bg, $grid)); imagegrid($img, $Width, $Height, 10, IMG_COLOR_STYLED); //makegrid($img, $Width, $Height, 10, $grid); $x1 = 0; $y1 = 0; $x2 = 541; $y2 = 541; $x1 = (271 - $x1); $y1 = (271 - $y1); function vetor(){ global $img; global $x1; global $y1; global $x2; global $y2; global $verde; imagesetthickness($img, 2); $vetor = imageline ($img, $x1, $y1, $x2, $y2, $verde); } //Desenha as linhas dos eixos imageline($img, 270, 0, 270, 540, $borda); //Eixo Y imageline($img, 0, 270, 540, 270, $borda); //Eixo X //Desenha a linha vermelha para a escala do eixo x for($l=0;$l<=540;$l+=10) { if($da == 0) { $da = 1; } elseif($da == 1){ //imageline($img,$l,270,$l+2,270,$fg); imagefilledellipse($img, $l, 270, 5, 5, $fg); //imagerectangle($img, $l+2,$l+3,$l+3,$l+4, $fg); $da = 0; } } //Desenha a linha vermelha para a escala do eixo y for($l=10;$l<=540;$l+=10) { if($da == 0) { $da = 1; } elseif($da == 1){ //imageline($img,$l,270,$l+2,270,$fg); imagefilledellipse($img, 270, $l, 5, 5, $fg); //imagerectangle($img, $l+2,$l+3,$l+3,$l+4, $fg); $da = 0; } } //Desenha um retangulo para a borda //Define a espessura das linhas e do retângulo imagesetthickness($img, 2); imagerectangle($img , 0, 0, 540, 540, $borda); $verde = imagecolorallocate($img, 255, 0, 125); imagesetthickness($img, 2); imageline ($img, 0, 0, 541, 541, $verde); vetor(); ImagePNG($img); ImageDestroy($img); //Função que gera as linhas da grade function imagegrid($image, $w, $h, $s, $color) { for($iw=1; $iw<$w/$s; $iw+=2){imageline($image, $iw*$s, 0, $iw*$s, $w, $color);} for($ih=1; $ih<$h/$s; $ih+=2){imageline($image, 0, $ih*$s, $w, $ih*$s, $color);} } ?>As variáveis: $x1, $y1, $x2 e $y2 na realidade vão receber ainda valores de um $_POST, porém por motivo de teste coloquei valor fixo, no entanto com os valores apresentados deveria criar uma reta a partir do centro do plano cartesiano, mas não estou conseguindo fazer isto neste código. O interessante é que a mesma função em outro código funciona conforme o esperado. mas preciso que isto funcione aqui no plano cartesiano.
Abaixo vai o código da função funcionando como o esperado para o código acima.
<?php Header("Content-type: image/png"); $Width=541; $Height=541; $img = ImageCreateTrueColor($Width, $Height); //Aloca cor para o preenchimento da imgem $bg = imagecolorallocate($img, 250, 250, 255); imagefill($img, 0, 0, $bg); $verde = imagecolorallocate($img, 255, 0, 255); $x1 = 0; //$_POST(); $y1 = 0; //$_POST(); $x2 = 300; //$_POST(); $y2 = 300; //$_POST(); $x1 = (270 - $x1); $y1 = (270 - $y1); $x2 = (270 - $x2); $x2 = (270 - $y2); function vetor(){ global $img; global $x1; global $y1; global $x2; global $y2; global $verde; imagesetthickness($img, 2); $vetor = imageline ($img, $x1, $y1, $x2, $y2, $verde); } vetor(); ImagePNG($img); ImageDestroy($img); ?>Por favor me ajudem a encontrar o erro do primeiro código, por favor....


Edição feita por: lwirkk, 19/08/2008, 23:17.
Adicionado a tag [code]/[codebox] para melhor visualização do código-fonte.