sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #84100
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