Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
- package Bildeanalyse;
- import java.util.ArrayList;
- import java.math.*;
- /**
- *
- * @author Eirik
- */
- public class ObjectCenter {
- public static int[] arealAndcenter(int[][] img){
- //Bildets bredde og høyde
- int width = img.length;
- int height = img[0].length;
- double avstandNede;
- double avstandOppe;
- double avstandHøgre;
- double avstandVenstre;
- //Oppretter en liste som inneholder objektets breddeposisjon
- ArrayList<Integer> listBredde1 = new ArrayList<Integer>();
- ArrayList<Integer> listHøgde1 = new ArrayList<Integer>();
- ArrayList<Integer> listBredde2 = new ArrayList<Integer>();
- ArrayList<Integer> listHøgde2 = new ArrayList<Integer>();
- ArrayList<Integer> listBredde3 = new ArrayList<Integer>();
- ArrayList<Integer> listHøgde3 = new ArrayList<Integer>();
- ArrayList<Integer> listBredde4 = new ArrayList<Integer>();
- ArrayList<Integer> listHøgde4 = new ArrayList<Integer>();
- for (int i = 0; i < width; i++) {
- for (int j = 0; j < height; j++) {
- if(img[i][j]==1){
- listBredde1.add(i);
- listHøgde1.add(j);
- }
- else if(img[i][j] == 2)
- {
- listBredde2.add(i);
- listHøgde2.add(j);
- }
- else if(img[i][j] == 3)
- {
- listBredde3.add(i);
- listHøgde3.add(j);
- }
- else if(img[i][j] == 4)
- {
- listBredde4.add(i);
- listHøgde4.add(j);
- }
- }
- }
- //Et array opprettes slik at både areal og senter kan returneres
- int[] array = new int[2];
- //sjekker om det ligger et objekt i bildet, ellers returneres verdien 0
- if(!listBredde1.isEmpty() && !listHøgde1.isEmpty() && !listBredde2.isEmpty() && !listHøgde2.isEmpty() && !listBredde3.isEmpty() && !listHøgde3.isEmpty() && !listBredde4.isEmpty() && !listHøgde4.isEmpty()){
- //Arealet blir Arraylistens størrelse
- int areal1 = listBredde1.size();
- int areal2 = listBredde2.size();
- int areal3 = listBredde3.size();
- int areal4 = listBredde4.size();
- //Senter finnes ved å dele objektets mål i bredden på to
- int centerx1 = (listBredde1.get(areal1-1)+listBredde1.get(0))/2;
- int centery1 = (listHøgde1.get(areal1-1)+listHøgde1.get(0))/2;
- int centerx2 = (listBredde2.get(areal2-1)+listBredde2.get(0))/2;
- int centery2 = (listHøgde2.get(areal2-1)+listHøgde2.get(0))/2;
- int centerx3 = (listBredde3.get(areal3-1)+listBredde3.get(0))/2;
- int centery3 = (listHøgde3.get(areal3-1)+listHøgde3.get(0))/2;
- int centerx4 = (listBredde4.get(areal4-1)+listBredde4.get(0))/2;
- int centery4 = (listHøgde4.get(areal4-1)+listHøgde4.get(0))/2;
- avstandVenstre = Math.sqrt(Math.pow((centerx2 - centerx1), 2) + Math.pow((centery2 - centery1),2));
- avstandHøgre = Math.sqrt(Math.pow((centerx4 - centerx3), 2) + Math.pow((centery3 - centery4),2));
- if (centery1 <= centery2)
- {
- // double høgdeVenstre = Math.sqrt(Math.pow((centerx2 - centerx1), 2) + Math.pow((centery2 - centery1),2));
- // double høgdeHøgre = Math.sqrt(Math.pow((centerx4 - centerx3), 2) + Math.pow((centery3 - centery4),2));
- if (centery3 <= centery4)
- {
- avstandOppe = Math.sqrt(Math.pow((centerx3 - centerx1), 2) + Math.pow((centery3 - centery1),2));
- avstandNede = Math.sqrt(Math.pow((centerx4 - centerx2), 2) + Math.pow((centery4 - centery2),2));
- }
- else
- {
- avstandOppe = Math.sqrt(Math.pow((centerx4 - centerx1), 2) + Math.pow((centery4 - centery1),2));
- avstandNede = Math.sqrt(Math.pow((centerx3 - centerx2), 2) + Math.pow((centery3 - centery2),2));
- }
- }
- else
- {
- // double høgdeVenstre = Math.sqrt(Math.pow((centerx1 - centerx2), 2) + Math.pow((centery1 - centery2),2));
- // double høgdeHøgre = Math.sqrt(Math.pow((centerx4 - centerx3), 2) + Math.pow((centery3 - centery4),2));
- if (centery3 <= centery4)
- {
- avstandOppe = Math.sqrt(Math.pow((centerx3 - centerx2), 2) + Math.pow((centery3 - centery2),2));
- avstandNede = Math.sqrt(Math.pow((centerx4 - centerx1), 2) + Math.pow((centery4 - centery1),2));
- }
- else
- {
- avstandOppe = Math.sqrt(Math.pow((centerx4 - centerx2), 2) + Math.pow((centery4 - centery2),2));
- avstandNede = Math.sqrt(Math.pow((centerx3 - centerx1), 2) + Math.pow((centery3 - centery1),2));
- }
- }
- //Areal og senter legges i array
- // array[0]=areal1;
- // array[1]=centerx1;
- // array[2]=centery1;
- // System.out.println("Pos1: " +centerx1 + centery1);
- // System.out.println("Pos2: " +centerx2 + centery2);
- // System.out.println("Pos3: " +centerx3 + centery3);
- // System.out.println("Pos4: " +centerx4 + centery4);
- System.out.println("Avstand venstre: " + avstandVenstre);
- System.out.println("Avstand høgre: " + avstandHøgre);
- System.out.println("Avstand oppe: " + avstandOppe);
- System.out.println("Avstand nede: " + avstandNede);
- double a = (-16.444444444441*(Math.pow(avstandHøgre, 3)) + 109.19047619046*(Math.pow(avstandHøgre, 2)) + (-243.29365079362*avstandHøgre) + 206.99999999999);
- // høgdeHøgre av femtegradsformel;
- double b = (avstandNede + avstandOppe)/2;
- double c = (-16.444444444441*(Math.pow(avstandVenstre, 3)) + 109.19047619046*(Math.pow(avstandVenstre, 2)) + (-243.29365079362*avstandVenstre) + 206.99999999999);
- double vinkelA = Math.acos((Math.pow(-a, 2) + Math.pow(b, 2) + Math.pow(c, 2))/2*b*c);
- System.out.println("Vinkel: " + vinkelA);
- }
- //Returnerer array med areal og senter verdier
- return array;
- }
- }
Add Comment
Please, Sign In to add comment