← Back to team overview

sslug-teknik team mailing list archive

Re: Arealberegning

 

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?

#!/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


Follow ups

References