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.










