00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 package com.meapsoft;
00024
00032 public class CosineDist extends ChunkDist
00033 {
00034 public CosineDist() {}
00035 public CosineDist(ChunkDist o) { super(o); }
00036 public CosineDist(int[] i) { super(i); }
00037 public CosineDist(ChunkDist o, int[] i) { super(o,i); }
00038
00039 public double distance(Chunk ch1, Chunk ch2)
00040 {
00041 FeatChunk c1 = null;
00042 FeatChunk c2 = null;
00043
00044
00045 try
00046 {
00047 c1 = (FeatChunk)ch1;
00048 c2 = (FeatChunk)ch2;
00049 }
00050 catch(ClassCastException e)
00051 {
00052 return super.distance(ch1, ch2);
00053 }
00054
00055 double[] f1 = c1.getFeatures(featdim);
00056 double[] f2 = c2.getFeatures(featdim);
00057 double dist = 0;
00058 double normf1 = 0;
00059 double normf2 = 0;
00060
00061 for(int i = 0; i < f1.length; i++)
00062 {
00063 dist += f1[i]*f2[i];
00064 normf1 += f1[i]*f1[i];
00065 normf2 += f2[i]*f2[i];
00066 }
00067
00068 dist = super.distance(ch1, ch2) + 1 - dist/Math.sqrt(normf1*normf2);
00069
00070 return dist;
00071 }
00072 }