PDA

Visualizza la versione completa : [perl] errore array


leorsid@
05-05-2004, 10:44
Ciao a tutti..
qualcuno mi saprebbe dire come mai ho questo tipo di errore??

Can't use string ("14.6666666666667") as an ARRAY ref while "strict refs" in use at C:/Programmi/Perl/site/lib/Math/Geometry/Planar.pm line 367.

il codice interessato questo:


for ($h=0;$h<=10;$h++){
push(@array_tmp,$xy_result[$h]->[0],$xy_result[$h]->[1],$xy_result[$h]->[2],$xy_result[$h]->[3]);
}

$p_intersezione=$polygon->points(@array_tmp);
$poly_intersezione=$contour->polygons([$p_result]);

many tahanks....

shishii
05-05-2004, 19:47
qual' esattamente la riga 367?

leorsid@
05-05-2004, 19:59
In pratica preso pari pari dal pm per l'utilizzo di $

$p_intersezione=$polygon->points(@array_tmp);
$poly_intersezione=$contour->polygons([$p_intersezione]);



$points = [[$x1,$y1],[$x2,$y2], ... ];
$polygon->points($points); # assign points to polygon object
$points1 = [[$x1,$y1],[$x2,$y2], ... ];
$points2 = [[ax1,by1],[ax2,by2], ... ];
$contour->polygons([$points1,$points2, ...]); # assign polgyons to contour object


E' come se poly_intersezione non contenesse niente...

shishii
05-05-2004, 20:03
ribadisco la richiesta... qual' la riga 367 del file Planar.pm?

leorsid@
05-05-2004, 20:13
ops me l'ero dimenticata:



# returns vector cross product of vectors p1p2 and p1p3
# using Cramer's rule
#
# args : reference to an array with 3 points p1,p2 and p3
#
sub CrossProduct {
my $pointsref = $_[0];
my @points = @$pointsref;
if (@points != 3) {
carp("Need 3 points for a cross product");
return;
}
my @p1 = @{$points[0]}; <-linea 367
my @p2 = @{$points[1]};
my @p3 = @{$points[2]};
my $det_p2p3 = &Determinant($p2[0], $p2[1], $p3[0], $p3[1]);
my $det_p1p3 = &Determinant($p1[0], $p1[1], $p3[0], $p3[1]);
my $det_p1p2 = &Determinant($p1[0], $p1[1], $p2[0], $p2[1]);
return ($det_p2p3-$det_p1p3+$det_p1p2);
}

shishii
05-05-2004, 20:42
prova a inserire sopra la riga 367 la seguente:

no strict 'refs';

e controlla se ti ancora errore.

questa non pu essere la soluzione ma pu dare indicazioni.

leorsid@
06-05-2004, 11:43
Allora, forse ho individuato dove sta il problema:

in pratica $polygon->points($points); dovrebbe costruire il perimetro di un poligono con i punti passati in argomento,
ho fatto un po di prove:

$points = [[1,1],[2,2],[2,1]];
$p_intersezione=$polygon->points($points);

funziona e non da errore, ma se faccio:

for ($h=0;$h<=10;$h++){
push(@array_tmp,$xy_result[$h]->[0],$xy_result[$h]->[1]);
}
$p_intersezione=$polygon->points(\@array_tmp);

errore.... come posso ovviare al problema??
grazie ancora...

shishii
06-05-2004, 13:01
dal poco codice che c' non capisco benissimo la natura dei vari elementi.

intanto fai la prova che ti ho detto, poi prova anche:

$p_intersezione=$polygon->points([@array_tmp]);

Loading