#!/usr/bin/perl use strict; use warnings; use Math::Vector::Real; use constant DEG_PER_RAD => 45 / atan2(1, 1); my ( $source, $out ) = qw/ IN OUT /; open my $in_fh, '<', $source or die qq{Unable to open "$source" for input: $!\n}; open my $out_fh, '>', $out or die qq{Unable to open "$out" for output: $!\n}; #select $out_fh; my @data; push @data, V(split) while <$in_fh>; for my $i ( 0 .. $#data-1 ) { for my $j ( $i+1 .. $#data ) { my $val1 = $data[$i]; my $val2 = $data[$j]; my $comp1 = $val1->[0]; my $comp2 = $val2->[0]; my $vect1 = $val1->[3..5]; my $vect2 = $val2->[3..5]; my $norm = $val1->[0..2]; my $nvect1 = $vect1 - $norm ; my $nvect2 = $vect1 - $norm ; if( $comp1 != $comp2 ){ next;}else{ my $degrees = atan2($nvect1, $nvect2) * DEG_PER_RAD; print "$degrees\n"; } } }