← Back to team overview

sslug-teknik team mailing list archive

Re: Arealberegning

 

On Sun, 2005-08-14 at 13:14 +0200, 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....
> 
> 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.
> 
Hvis det kun er arealet du er intreseret i er det ikke nødvendig med
trekants beregning:

Jeg mener der er en formel som ser således ud:
2 * Areal = |(x_1 * y_2) + (x_2 * y_3) + ... + (x_(n-1) * y_(n)) + (x_n
* y_1) - (y_1 * x_2) - (y_2 * x_3) - ... - (y_(n-1) * x(n)) - (y_n *
y_1)|

Det er lidt svært at overskuligt men hvis du er i tvivl om hvad jeg
mener så skriv en mail og jag kan sende et latex document med mere
præcist syntaks.

Lige et eks:

 ^
3| +---+
2| |   |
1| +---+
 |--------->
   1 2 3

Altså en firkant med koordinaterne (1, 1); (1, 3); (3, 3); (3, 1)

Arealet bliver således:
Areal = 1/2 * (1*3+1*3+3*1+3*1-1*1-3*3-3*3-1*1) = 4

eller i Java:

public class test{
    public static void main(String[] args){

        double[] x_koor = {1, 1, 3, 3};
        double[] y_koor = {1, 3, 3, 1};
        double areal =  x_koor[x_koor.length-1] * y_koor[0] -
            y_koor[y_koor.length-1] * x_koor[0];
        System.out.print("Areal = |" + x_koor[x_koor.length-1] + " * " +
y_koor[0] + " - " + y_koor[y_koor.length-1] + " * " + x_koor[0]);


        for(int i=0; i < x_koor.length - 1; i++){
            areal = areal + x_koor[i] * y_koor[i+1];
            areal = areal - y_koor[i] * x_koor[i+1];
            System.out.print(" + " + x_koor[i] +" * " + y_koor[i+1]);
            System.out.print(" - " + y_koor[i] + " * "  + x_koor[i+1]);
        }

        System.out.println("|*(1/2)");
        areal = Math.abs(areal*0.5);
        System.out.println("Areal = " + areal);

    }
}


MVH
Allan W. Nielsen



References