I have a code that determines the distance between some points and lists the distances in a matrix like so,
0 4 5 4 0 4 5 4 0
Right now I type the points manually, but I want the code to read the text file itself so I don't type 900+ values manually.
Here is the format of the text file (file.txt):
A X 79 54 53 B Y 81 54 50 C Y 83 51 52
X and Y is extra information, not important for calculating distance. And here's the code I have (Thank you to user NetWallah for help with this):
my @points = ( {A=>A, X=>79.620, Y=>54.720, Z=>53.034}, {A=>B, X=>81.822, Y=>54.071, Z=>50.027}, {A=>C, X=>83.871, Y=>51.966, Z=>52.424}); my @results; for my $x(0..$#points){ my $p1 = $points[$x]; for my $y (0..$#points){ my $p2 = $points[$y]; my $dist = sqrt(abs(( $p1->{X} - $p2->{X} ) **2 + ( $p1->{Y} - $p2->{Y} ) **2 + ( $p1->{Z} - $p2->{Z} ) **2)) ; $results[$x][$y] = sprintf("%.0f", $dist); } } #------------------- for my $r (@results){ printf "%.0f\t",$_ for @$r; print "\n"; }
I added the "A=>" part because I wanted the matrix to show that parameter when it listed distance, but I have been unable to work that in properly.
This is the distance equation I am using:
$d = sqrt(($rx1 - $rx2)**2 + ($ry1 - $ry2)**2 + ($rz1 - $rz2)**2);
I would appreciate any advice on how to get the code to 1) read the values so I don't have to type them manually, and 2) print the matrix like so:
A B C A 0 4 5 B 4 0 4 C 5 4 0
In reply to reading a text file and accepting input by doozy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |