← Back to team overview

sslug-teknik team mailing list archive

Re: Arealberegning

 

On Sun, 14 Aug 2005, Mogens Kjaer wrote:

> Peter Toft wrote:
> > Jeg har en CAD-lignende opgave, som jeg ved kan løses på Linux :)
> > Jeg har en række x,y koordinater til nogle hjørnepunkter i et areal.
> > (12212.0,2123.0)
> > (23233.0,34.0)
> > ....
> > (2323.,4556.0)
> > Jeg vil gerne have mulighed for at kyle alle mine koordinater ind, og
> > derefter sige at mit areal er defineret af følgende trekanter (som
> > anvender mine x,y koordinater ovenfor)
> > punkt 1, 2 og 3
> > punkt 2, 4 og 6
> > og så skal programmet give mig det samlede areal af alle de trekanter der
> > ligger i min figur.
> > 
> > Det tager to-tre timer at lave, men det må næsten findes i forvejen....
> 
> Lidt perlgymnastik kan måske bruges?

Smukt - tak Mogens :-)))

/pto

> 
> #!/usr/bin/perl
> 
> open(KOORDINATER, "koord.dat") or die;
> 
> while($linie = <KOORDINATER>)
> {
> chomp($linie);
> if($linie =~ /\s*\(([0-9\.\+\-e]+),([0-9\.\+\-e]+)\)/)
> {
> push @xkoord, $1;
> push @ykoord, $2;
>   }
> }
> 
> $totalareal = 0.0;
> 
> open(INDICES, "indices.dat") or die;
> 
> while($linie = <INDICES>)
> {
> chomp($linie);
> if($linie =~ /^(\d+)\s+(\d+)\s+(\d+)$/)
> {
> $x1 = $xkoord[$1-1];
> $y1 = $ykoord[$1-1];
> $x2 = $xkoord[$2-1];
> $y2 = $ykoord[$2-1];
> $x3 = $xkoord[$3-1];
> $y3 = $ykoord[$3-1];
> $areal = abs(0.5*(-$x2*$y1 + $x3*$y1 + $x1*$y2 - $x3*$y2 - $x1*$y3 
> +$x2*$y3));
>  $totalareal += $areal;
>   }
> }
> 
> print "Totalareal: $totalareal\n";
> 
> 
> Regexp'erne skal måske skrives lidt om...
> 
> Mogens
> 
> -- 
> Mogens Kjær, Dataarkæolog
> Email: mk@xxxxxxxxxxxxx
> Homepage: http://www.datamuseum.dk
> 
> 
> 

Peter Toft, Ph.D. [pto@xxxxxxxxxxx] http://pto.linux.dk

 Audience:  What do you want, Eric?
 Eric:  I want to live in a world where software doesn't suck.
 Richard:  Any software that isn't free sucks.
 Linus:  I'm interested in free beer.

References