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