Leser: 22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
A B C
Typ1 109 71 30
Typ2 19 56 99
Obj1 25 60 80
schlüssel-obj1-typ1 = abs(25 - 109) + abs(60 - 71) + abs(30 - 80)
schlüssel-obj1-typ1 = 145
schlüssel-obj1-typ2 = abs(25 - 19) + abs(60 - 56) + abs(30 - 99)
schlüssel-obj1-typ2 = 79
allgemein:
schlüssel = abs(objX->A - typY->A) + abs(objX->B - typY->B) + abs(objX->C - typY->C)
schlüssel = abs(objX->A - typY->A)*prioA + abs(objX->B - typY->B)*prioB + abs(objX->C - typY->C)*prioC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
sub PerformCheck { my @TableOfValues = ([109.339632149156, 71.2834467120181, 30.1753590325019], [19.4394053917863, 56.1546989166037, 99.2312925170068], [97.2249937011842, 96.7168052406148, 99.9543965734442], [35.6661627614009, 112.246157722348, 33.4111866969010], [141.426303854875, 50.0745779793399, 53.4378936759889], [71.9997480473671, 17.6830435878055, 73.3968253968254], [80.3456790123457, 80.1315192743764, 24.8614260519022]); my @ObjValues = @_; my $CurrValue = 195076; my $objType = 0; for my $i (0..$#TableOfValues) { my $diff = (); for my $i2 (0..2) { $diff += ($ObjValues[$i2] - ${$TableOfValues[$i]}[$i2]) ** 2; } if ($diff < $CurrValue) { $CurrValue = $diff; $objType = $i + 1; } } return $objType; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
sub PerformCheck { my @TableOfValues = ([109.339632149156, 71.2834467120181, 30.1753590325019], [19.4394053917863, 56.1546989166037, 99.2312925170068], [97.2249937011842, 96.7168052406148, 99.9543965734442], [35.6661627614009, 112.246157722348, 33.4111866969010], [141.426303854875, 50.0745779793399, 53.4378936759889], [71.9997480473671, 17.6830435878055, 73.3968253968254], [80.3456790123457, 80.1315192743764, 24.8614260519022]); my @ObjValues = @_; my $CurrValue = undef; my $objType = 0; for my $i (0..$#TableOfValues) { my $diff = (); for my $i2 (0..2) { $diff += ($ObjValues[$i2] - $TableOfValues[$i][$i2]) ** 2; } # Es einen Wert geben, der den voreingestellten übersteigt, aber der Beste ist. $CurrValue = $diff if(!defined($CurrValue)); if ($diff < $CurrValue) { $CurrValue = $diff; $objType = $i + 1; } } return $objType; }
$CurrValue = $diff + 1 if(!defined($CurrValue));