annotate mayachemtools/lib/Vector.pm @ 2:dfff2614510e draft

Deleted selected files
author deepakjadmin
date Wed, 20 Jan 2016 12:15:15 -0500
parents 73ae111cf86f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1 package Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
2 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: Vector.pm,v $
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:47:30 $
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.34 $
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
6 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
7 # Author: Manish Sud <msud@san.rr.com>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
8 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
9 # Copyright (C) 2015 Manish Sud. All rights reserved.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
10 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
11 # This file is part of MayaChemTools.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
12 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
13 # MayaChemTools is free software; you can redistribute it and/or modify it under
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
14 # the terms of the GNU Lesser General Public License as published by the Free
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
15 # Software Foundation; either version 3 of the License, or (at your option) any
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
16 # later version.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
17 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
18 # MayaChemTools is distributed in the hope that it will be useful, but without
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
19 # any warranty; without even the implied warranty of merchantability of fitness
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
20 # for a particular purpose. See the GNU Lesser General Public License for more
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
21 # details.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
22 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
23 # You should have received a copy of the GNU Lesser General Public License
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
26 # Boston, MA, 02111-1307, USA.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
27 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
28
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
29 use strict;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
30 use Carp;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
31 use Exporter;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
32 use Scalar::Util ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
33 use StatisticsUtil ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
34
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
35 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
36
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
37 @ISA = qw(Exporter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
38 @EXPORT = qw(IsVector UnitXVector UnitYVector UnitZVector UnitVector ZeroVector);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
39 @EXPORT_OK = qw(SetValuePrintFormat);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
40
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
41 %EXPORT_TAGS = (
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
42 all => [@EXPORT, @EXPORT_OK]
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
43 );
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
44
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
45 # Setup class variables...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
46 my($ClassName, $ValueFormat);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
47 _InitializeClass();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
48
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
49 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
50 # Using the following explicity overloaded operators, Perl automatically generates methods
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
51 # for operations with no explicitly defined methods. Autogenerated methods are possible for
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
52 # these operators:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
53 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
54 # o Arithmetic operators: += -= *= /= **= %= ++ -- x= .=
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
55 # o Increment and decrement: ++ --
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
56 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
57 # 'fallback' is set to 'false' to raise exception for all other operators.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
58 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
59 use overload '""' => 'StringifyVector',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
60
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
61 '0+' => '_NumifyVector',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
62
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
63 '@{}' => '_VectorToArrayOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
64
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
65 '+' => '_VectorAdditionOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
66 '-' => '_VectorSubtractionOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
67 '*' => '_VectorMultiplicationOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
68 '/' => '_VectorDivisionOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
69 '**' => '_VectorExponentiationOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
70 '%' => '_VectorModulusOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
71
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
72 'x' => '_VectorCrossProductOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
73 '.' => '_VectorDotProductOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
74
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
75 'bool' => '_VectorBooleanOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
76 '!' => '_VectorNotBooleanOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
77
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
78 '==' => '_VectorEqualOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
79 '!=' => '_VectorNotEqualOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
80 '<' => '_VectorLessThanOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
81 '<=' => '_VectorLessThanEqualOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
82 '>' => '_VectorGreatarThanOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
83 '>=' => '_VectorGreatarThanEqualOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
84
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
85 'neg' => '_VectorNegativeValueOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
86
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
87 'abs' => '_VectorAbsoluteValueOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
88 'exp' => '_VectorExpNaturalBaseOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
89 'log' => '_VectorLogNaturalBaseOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
90 'sqrt' => '_VectorSquareRootOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
91 'cos' => '_VectorCosineOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
92 'sin' => '_VectorSineOperator',
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
93
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
94 'fallback' => undef;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
95
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
96 # Class constructor...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
97 sub new {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
98 my($Class, @Values) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
99
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
100 # Initialize object...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
101 my $This = {};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
102 bless $This, ref($Class) || $Class;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
103 $This->_InitializeVector();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
104
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
105 $This->_AddValues(@Values);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
106
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
107 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
108 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
109
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
110 # Initialize object data...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
111 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
112 sub _InitializeVector {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
113 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
114
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
115 @{$This->{Values}} = ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
116 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
117
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
118 # Initialize class ...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
119 sub _InitializeClass {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
120 #Class name...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
121 $ClassName = __PACKAGE__;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
122
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
123 # Print format for vector values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
124 $ValueFormat = "%g";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
125 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
126
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
127 # Initialize vector values using:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
128 # o List of values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
129 # o Reference to an list of values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
130 # o Another vector object
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
131 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
132 sub _AddValues {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
133 my($This, @Values) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
134
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
135 if (!@Values) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
136 return;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
137 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
138
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
139 # Set vector values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
140 my($FirstValue, $TypeOfFirstValue);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
141 $FirstValue = $Values[0];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
142 $TypeOfFirstValue = ref $FirstValue;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
143 if ($TypeOfFirstValue =~ /^(SCALAR|HASH|CODE|REF|GLOB)/) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
144 croak "Error: ${ClassName}->_AddValues: Trying to add values to vector object with a reference to unsupported value format...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
145 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
146
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
147 if (_IsVector($FirstValue)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
148 # Initialize using Vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
149 push @{$This->{Values}}, @{$FirstValue->{Values}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
150 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
151 elsif ($TypeOfFirstValue =~ /^ARRAY/) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
152 # Initialize using array refernce...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
153 push @{$This->{Values}}, @{$FirstValue};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
154 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
155 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
156 # It's a list of values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
157 push @{$This->{Values}}, @Values;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
158 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
159 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
160
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
161 # Add values to a vector using a vector, reference to an array or an array...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
162 sub AddValues {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
163 my($This, @Values) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
164
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
165 $This->_AddValues(@Values);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
166
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
167 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
168 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
169
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
170 # Copy vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
171 sub Copy {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
172 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
173 my($Vector);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
174
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
175 # Copy vector values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
176 $Vector = (ref $This)->new(\@{$This->{Values}});
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
177
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
178 # Copy value format for stringification...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
179 if (exists $This->{ValueFormat}) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
180 $Vector->{ValueFormat} = $This->{ValueFormat};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
181 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
182 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
183 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
184
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
185 # Get 3D vector length...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
186 sub GetLength {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
187 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
188
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
189 if ($This->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
190 croak "Error: ${ClassName}->GetGetLength: Object must be a 3D vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
191 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
192 my($Length, $DotProduct);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
193 $DotProduct = $This . $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
194 $Length = sqrt $DotProduct;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
195
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
196 return $Length;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
197 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
198
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
199 # Length of a 3D vector by another name...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
200 sub GetMagnitude {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
201 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
202 return $This->GetLength();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
203 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
204
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
205 # Normalize 3D vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
206 sub Normalize {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
207 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
208
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
209 if ($This->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
210 croak "Error: ${ClassName}->GetGetLength: Object must be a 3D vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
211 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
212 my($Vector, $Length);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
213 $Length = $This->GetLength();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
214 $Vector = $This / $Length;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
215
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
216 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
217 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
218
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
219 # Is it a vector object?
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
220 sub IsVector ($) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
221 my($Object) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
222
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
223 return _IsVector($Object);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
224 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
225
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
226 # Get size...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
227 sub GetSize {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
228 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
229
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
230 return scalar @{$This->{Values}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
231 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
232
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
233 # Get X value of a 3D vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
234 sub GetX {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
235 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
236
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
237 if ($This->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
238 croak "Error: ${ClassName}->GetX: Object must be a 3D vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
239 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
240 return $This->_GetValue(0);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
241 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
242
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
243 # Set X value of a 3D vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
244 sub SetX {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
245 my($This, $Value) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
246
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
247 if ($This->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
248 croak "Error: ${ClassName}->SetX: Object must be a 3D vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
249 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
250 return $This->_SetValue(0, $Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
251 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
252
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
253 # Get Y value of a 3D vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
254 sub GetY {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
255 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
256
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
257 if ($This->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
258 croak "Error: ${ClassName}->GetY: Object must be a 3D vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
259 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
260 return $This->_GetValue(1);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
261 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
262
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
263 # Set Y value of a 3D vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
264 sub SetY {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
265 my($This, $Value) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
266
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
267 if ($This->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
268 croak "Error: ${ClassName}->SetY: Object must be a 3D vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
269 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
270 return $This->_SetValue(1, $Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
271 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
272
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
273 # Get Z value of a 3D vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
274 sub GetZ {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
275 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
276
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
277 if ($This->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
278 croak "Error: ${ClassName}->GetZ: Object must be a 3D vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
279 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
280 return $This->_GetValue(2);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
281 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
282
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
283 # Set Z value of a 3D vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
284 sub SetZ {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
285 my($This, $Value) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
286
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
287 if ($This->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
288 croak "Error: ${ClassName}->SetZ: Object must be a 3D vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
289 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
290 return $This->_SetValue(2, $Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
291 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
292
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
293 # Set XYZ value of a 3D vector using:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
294 # o List of values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
295 # o Reference to an list of values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
296 # o Another vector object
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
297 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
298 sub SetXYZ {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
299 my($This, @Values) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
300
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
301 if (!@Values) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
302 croak "Error: ${ClassName}->SetXYZ: No values specified...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
303 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
304
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
305 if ($This->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
306 croak "Error: ${ClassName}->SetXYZ: Object must be a 3D vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
307 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
308
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
309 # Set vector values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
310 my($FirstValue, $TypeOfFirstValue);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
311 $FirstValue = $Values[0];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
312 $TypeOfFirstValue = ref $FirstValue;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
313 if ($TypeOfFirstValue =~ /^(SCALAR|HASH|CODE|REF|GLOB)/) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
314 croak "Error: ${ClassName}->SetXYZ: A reference to unsupported value format specified...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
315 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
316
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
317 my($X, $Y, $Z);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
318 if (_IsVector($FirstValue)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
319 # SetXYZ using vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
320 if ($FirstValue->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
321 croak "Error: ${ClassName}->SetXYZ: Input object must be a 3D vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
322 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
323 ($X, $Y, $Z) = @{$FirstValue->{Values}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
324 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
325 elsif ($TypeOfFirstValue =~ /^ARRAY/) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
326 # SetXYZ using array reference...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
327 if (@{$FirstValue} != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
328 croak "Error: ${ClassName}->SetXYZ: Input array reference must correspond to an array with three values...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
329 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
330 ($X, $Y, $Z) = @{$FirstValue};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
331 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
332 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
333 # It's a list of values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
334 if (@Values != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
335 croak "Error: ${ClassName}->SetXYZ: Input array must contain three values...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
336 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
337 ($X, $Y, $Z) = @Values;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
338 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
339 $This->{Values}[0] = $X;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
340 $This->{Values}[1] = $Y;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
341 $This->{Values}[2] = $Z;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
342
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
343 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
344 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
345
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
346 # Get XYZ as an array or a reference to an array...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
347 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
348 sub GetXYZ {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
349 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
350
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
351 if ($This->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
352 croak "Error: ${ClassName}->GetXYZ: Object must be a 3D vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
353 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
354 return wantarray ? @{$This->{Values}} : \@{$This->{Values}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
355 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
356
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
357 # Get a specific value from vector with indicies starting from 0..
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
358 sub GetValue {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
359 my($This, $Index) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
360
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
361 if ($Index < 0) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
362 croak "Error: ${ClassName}->GetValue: Index value must be a positive number...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
363 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
364 if ($Index >= $This->GetSize()) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
365 croak "Error: ${ClassName}->GetValue: Index value must be less than size of vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
366 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
367 return $This->_GetValue($Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
368 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
369
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
370 # Get a vector value...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
371 sub _GetValue {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
372 my($This, $Index) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
373
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
374 return $This->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
375 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
376
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
377 # Set a specific value in vector with indicies starting from 0..
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
378 sub SetValue {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
379 my($This, $Index, $Value, $SkipCheck) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
380
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
381 # Just set it...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
382 if ($SkipCheck) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
383 return $This->_SetValue($Index, $Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
384 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
385
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
386 # Check and set...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
387 if ($Index < 0) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
388 croak "Error: ${ClassName}->SetValue: Index value must be a positive number...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
389 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
390 if ($Index >= $This->GetSize()) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
391 croak "Error: ${ClassName}->SetValue: Index vaue must be less than size of vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
392 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
393
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
394 return $This->_SetValue($Index, $Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
395 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
396
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
397 # Set a vector value...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
398 sub _SetValue {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
399 my($This, $Index, $Value) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
400
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
401 $This->{Values}[$Index] = $Value;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
402
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
403 return $This;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
404 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
405
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
406 # Return vector values as an array or reference to an array...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
407 sub GetValues {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
408 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
409
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
410 return wantarray ? @{$This->{Values}} : \@{$This->{Values}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
411 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
412
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
413 # Get number of non-zero values in vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
414 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
415 sub GetNumOfNonZeroValues {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
416 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
417 my($Count, $Index, $Size);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
418
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
419 $Count = 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
420 $Size = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
421
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
422 for $Index (0 .. ($Size -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
423 if ($This->{Values}[$Index] != 0) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
424 $Count++;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
425 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
426 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
427 return $Count;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
428 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
429
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
430 # Get percent of non-zero values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
431 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
432 sub GetPercentOfNonZeroValues {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
433 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
434
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
435 return $This->GetSize() ? (($This->GetNumOfNonZeroValues()/$This->GetSize())*100) : 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
436 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
437
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
438 # Set value print format for an individual object or the whole class...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
439 sub SetValuePrintFormat ($;$) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
440 my($FirstParameter, $SecondParameter) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
441
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
442 if ((@_ == 2) && (_IsVector($FirstParameter))) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
443 # Set value print format for the specific object...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
444 my($This, $ValuePrintFormat) = ($FirstParameter, $SecondParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
445
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
446 $This->{ValueFormat} = $ValuePrintFormat;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
447 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
448 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
449 # Set value print format for the class...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
450 my($ValuePrintFormat) = ($FirstParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
451
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
452 $ValueFormat = $ValuePrintFormat;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
453 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
454 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
455
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
456 # Zero vector of specified size or size 3...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
457 sub ZeroVector (;$) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
458 my($Size) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
459 my($Vector, @Values);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
460
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
461 $Size = (defined $Size) ? $Size : 3;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
462 @Values = ('0') x $Size;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
463
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
464 $Vector = new Vector(\@Values);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
465 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
466 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
467
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
468 # Unit vector of specified size or size 3...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
469 sub UnitVector (;$) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
470 my($Size) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
471 my($Vector, @Values);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
472
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
473 $Size = (defined $Size) ? $Size : 3;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
474 @Values = ('1') x $Size;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
475
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
476 $Vector = new Vector(\@Values);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
477 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
478 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
479
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
480 # Unit X vector of size 3...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
481 sub UnitXVector () {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
482 my($Vector);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
483
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
484 $Vector = new Vector(1, 0, 0);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
485 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
486 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
487
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
488 # Unit Y vector of size 3...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
489 sub UnitYVector () {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
490 my($Vector);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
491
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
492 $Vector = new Vector(0, 1, 0);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
493 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
494 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
495
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
496 # Unit Z vector of size 3...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
497 sub UnitZVector () {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
498 my($Vector);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
499
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
500 $Vector = new Vector(0, 0, 1);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
501 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
502 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
503
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
504 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
505 # Vector addition operator supports two addition modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
506 # . Addition of two vectors by adding corresponding vector values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
507 # . Addition of a scalar value to vector values ($Vector + 1)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
508 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
509 # Caveats:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
510 # . Addition of a vector to scalar is not allowed (1 + $Vector)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
511 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
512 sub _VectorAdditionOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
513 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
514
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
515 $ErrorMsg = "_VectorAdditionOperator: Vector addition failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
516 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
517
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
518 # Do the addition. Order can be ignored: It's a commumative operation.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
519 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
520 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
521 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
522
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
523 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
524 # $OrderFlipped is set to false for two vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
525 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
526 $Vector->{Values}[$Index] += $Other->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
527 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
528 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
529 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
530 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
531 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
532 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
533 # Scalar addition...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
534 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
535 $Vector->{Values}[$Index] += $Other;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
536 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
537 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
538 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
539 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
540
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
541 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
542 # Vector subtraction operator supports two subtraction modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
543 # . Subtraction of two vectors by subtracting corresponding vector values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
544 # . Subtraction of a scalar value from vector values ($Vector - 1)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
545 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
546 # Caveats:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
547 # . Subtraction of a vector from scalar is not allowed (1 - $Vector)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
548 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
549 sub _VectorSubtractionOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
550 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
551
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
552 $ErrorMsg = "_VectorSubtractionOperator: Vector subtracttion failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
553 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
554
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
555 # Do the subtraction...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
556 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
557 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
558 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
559
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
560 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
561 # $OrderFlipped is set to false for two vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
562 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
563 $Vector->{Values}[$Index] -= $Other->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
564 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
565 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
566 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
567 # Scalar subtraction...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
568 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
569 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
570 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
571 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
572 $Vector->{Values}[$Index] -= $Other;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
573 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
574 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
575 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
576 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
577
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
578 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
579 # Vector multiplication operator supports two multiplication modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
580 # . Multiplication of two vectors by multiplying corresponding vector values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
581 # . Multiplying vector values by a scalar ($Vector * 1)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
582 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
583 # Caveats:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
584 # . Multiplication of a scalar by a vector is not allowed (1 * $Vector)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
585 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
586 sub _VectorMultiplicationOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
587 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
588
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
589 $ErrorMsg = "_VectorMultiplicationOperator: Vector addition failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
590 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
591
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
592 # Do the multiplication...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
593 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
594 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
595 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
596
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
597 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
598 # $OrderFlipped is set to false for two vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
599 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
600 $Vector->{Values}[$Index] *= $Other->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
601 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
602 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
603 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
604 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
605 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
606 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
607 # Scalar multiplication...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
608 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
609 $Vector->{Values}[$Index] *= $Other;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
610 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
611 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
612 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
613 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
614
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
615 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
616 # Vector division operator supports two division modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
617 # . Division of two vectors by dividing corresponding vector values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
618 # . Dividing vector values by a scalar ($Vector / 2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
619 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
620 # Caveats:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
621 # . Division of a scalar by a vector is not allowed (1 / $Vector)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
622 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
623 sub _VectorDivisionOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
624 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
625
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
626 $ErrorMsg = "_VectorDivisionOperator: Vector division failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
627 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
628
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
629 # Do the division...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
630 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
631 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
632 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
633
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
634 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
635 # $OrderFlipped is set to false for two vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
636 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
637 $Vector->{Values}[$Index] /= $Other->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
638 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
639 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
640 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
641 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
642 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
643 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
644 # Scalar divison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
645 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
646 $Vector->{Values}[$Index] /= $Other;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
647 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
648 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
649 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
650 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
651
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
652 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
653 # Vector exponentiation operator supports two exponentiation modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
654 # . Exponentiation of two vectors by exponentiation of corresponding vector values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
655 # . Exponentiation of vector values by a scalar ($Vector ** 2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
656 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
657 # Caveats:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
658 # . Exponent of scalar by a vector is not allowed (2 ** $Vector)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
659 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
660 sub _VectorExponentiationOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
661 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
662
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
663 $ErrorMsg = "_VectorExponentiationOperator: Vector exponentiation failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
664 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
665
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
666 # Do the exponentiation...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
667 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
668 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
669 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
670
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
671 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
672 # $OrderFlipped is set to false for two vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
673 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
674 $Vector->{Values}[$Index] **= $Other->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
675 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
676 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
677 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
678 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
679 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
680 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
681 # Scalar exponentiation...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
682 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
683 $Vector->{Values}[$Index] **= $Other;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
684 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
685 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
686 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
687 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
688
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
689 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
690 # Vector modulus operator supports two modulus modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
691 # . Modulus of two vectors by taking modulus between corresponding vector values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
692 # . Modulus of vector values by a scalar ($Vector % 2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
693 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
694 # Caveats:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
695 # . Modulus of scalar by a vector is not allowed (2 % $Vector)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
696 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
697 sub _VectorModulusOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
698 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
699
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
700 $ErrorMsg = "_VectorModulusOperator: Vector exponentiation failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
701 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
702
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
703 # Take the modulus...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
704 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
705 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
706 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
707
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
708 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
709 # $OrderFlipped is set to false for two vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
710 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
711 $Vector->{Values}[$Index] %= $Other->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
712 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
713 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
714 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
715 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
716 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
717 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
718 # Scalar modulus...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
719 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
720 $Vector->{Values}[$Index] %= $Other;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
721 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
722 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
723 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
724 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
725
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
726 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
727 # Vector dot product operator supports two modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
728 # . Dot product of two 3D vectors
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
729 # . Concatenation of a vector and a scalar
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
730 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
731 sub _VectorDotProductOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
732 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
733
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
734 $ErrorMsg = "_VectorDotProductOperator: Vector dot product failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
735 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
736
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
737 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
738 # Calculate dot product of two 3D vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
739 my($DotProduct);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
740 if ($This->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
741 croak "Error: ${ClassName}->${ErrorMsg}: Both vectors must be 3D vectors...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
742 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
743 $DotProduct = $This->GetX() * $Other->GetX + $This->GetY() * $Other->GetY() + $This->GetZ * $Other->GetZ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
744 return $DotProduct;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
745 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
746 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
747 # Do a string concatenation and return the string...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
748 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
749 return $Other . $This->StringifyVector();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
750 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
751 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
752 return $This->StringifyVector() . $Other;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
753 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
754 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
755 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
756
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
757 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
758 # Vector cross product operator genrates a new vector which is the cross
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
759 # product of two 3D vectors.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
760 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
761 # For two vectors, V1 (X1, Y1, Z1) and V2 (X2, Y2, Z2), cross product
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
762 # V1 x V2 corresponds: (Y1.Z2 - Z1.Y2), (Z1.X2 - X1.Z2), (X1.Y2 - Y1.X2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
763 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
764 sub _VectorCrossProductOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
765 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
766
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
767 $ErrorMsg = "_VectorCrossProductOperator: Vector cross product failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
768 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
769
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
770 if (!$OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
771 croak "Error: ${ClassName}->${ErrorMsg}: Both object must be vectors...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
772 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
773
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
774 # Calculate cross product of two 3D vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
775 if ($This->GetSize() != 3) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
776 croak "Error: ${ClassName}->${ErrorMsg}: Both vectors must be 3D vectors...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
777 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
778 my($Vector, $X, $Y, $Z);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
779 $X = $This->GetY() * $Other->GetZ() - $This->GetZ() * $Other->GetY();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
780 $Y = $This->GetZ() * $Other->GetX() - $This->GetX() * $Other->GetZ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
781 $Z = $This->GetX() * $Other->GetY() - $This->GetY() * $Other->GetX();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
782
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
783 $Vector = (ref $This)->new($X, $Y, $Z);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
784
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
785 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
786 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
787
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
788 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
789 # Vector booelan operator checks whether a vector contains at least one non-zero
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
790 # value...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
791 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
792 sub _VectorBooleanOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
793 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
794
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
795 $ErrorMsg = "_VectorBooleanOperator: Vector boolean operation failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
796 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
797
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
798 my($Size, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
799 $Size = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
800
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
801 for $Index (0 .. ($Size - 1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
802 if ($This->{Values}[$Index] != 0) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
803 return 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
804 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
805 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
806 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
807 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
808
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
809 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
810 # Vector not booelan operator checks whether all values of a vector are zero.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
811 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
812 sub _VectorNotBooleanOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
813 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
814
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
815 $ErrorMsg = "_VectorNotBooleanOperator: Vector not boolean operation failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
816 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
817
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
818 my($Size, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
819 $Size = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
820
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
821 for $Index (0 .. ($Size - 1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
822 if ($This->{Values}[$Index] != 0) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
823 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
824 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
825 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
826 return 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
827 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
828
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
829 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
830 # Vector equal operator supports two modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
831 # . Comparion of corresponding values in two vectors
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
832 # . Comparing vectors values to a scalar ($Vector == 2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
833 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
834 # Caveats:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
835 # . Comparison of a scalar to vector values is not allowed (2 == $Vector)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
836 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
837 sub _VectorEqualOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
838 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg, $CheckVectorSizes);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
839
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
840 $ErrorMsg = "_VectorEqualOperator: Vector equal comparison failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
841 $CheckVectorSizes = 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
842 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckVectorSizes);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
843
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
844 # Do the comparison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
845 my($ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
846 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
847
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
848 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
849 # $OrderFlipped is set to false for two vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
850 my($OtherSize) = $Other->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
851 if ($ThisSize != $OtherSize) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
852 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
853 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
854 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
855 if ($This->{Values}[$Index] != $Other->{Values}[$Index]) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
856 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
857 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
858 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
859 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
860 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
861 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
862 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
863 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
864 # Scalar comparison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
865 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
866 if ($This->{Values}[$Index] != $Other) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
867 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
868 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
869 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
870 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
871 return 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
872 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
873
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
874 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
875 # Vector not equal operator supports two modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
876 # . Comparion of corresponding values in two vectors
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
877 # . Comparing vectors values to a scalar ($Vector != 2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
878 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
879 # Caveats:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
880 # . Comparison of a scalar to vector values is not allowed (2 != $Vector2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
881 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
882 sub _VectorNotEqualOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
883 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg, $CheckVectorSizes);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
884
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
885 $ErrorMsg = "_VectorNotEqualOperator: Vector not equal comparison failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
886 $CheckVectorSizes = 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
887 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckVectorSizes);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
888
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
889 # Do the comparison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
890 my($ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
891 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
892
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
893 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
894 # $OrderFlipped is set to false for two vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
895 my($OtherSize) = $Other->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
896 if ($ThisSize != $OtherSize) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
897 return 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
898 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
899 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
900 if ($This->{Values}[$Index] == $Other->{Values}[$Index]) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
901 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
902 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
903 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
904 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
905 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
906 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
907 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
908 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
909 # Scalar comparison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
910 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
911 if ($This->{Values}[$Index] == $Other) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
912 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
913 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
914 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
915 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
916 return 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
917 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
918
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
919 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
920 # Vector less than operator supports two modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
921 # . Comparion of corresponding values in two vectors
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
922 # . Comparing vectors values to a scalar ($Vector < 2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
923 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
924 # Caveats:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
925 # . Comparison of a scalar to vector values is not allowed (2 < $Vector2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
926 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
927 sub _VectorLessThanOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
928 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
929
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
930 $ErrorMsg = "_VectorLessThanOperator: Vector less than comparison failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
931 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
932
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
933 # Do the comparison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
934 my($ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
935 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
936
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
937 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
938 # $OrderFlipped is set to false for two vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
939 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
940 if ($This->{Values}[$Index] >= $Other->{Values}[$Index]) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
941 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
942 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
943 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
944 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
945 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
946 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
947 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
948 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
949 # Scalar comparison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
950 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
951 if ($This->{Values}[$Index] >= $Other) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
952 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
953 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
954 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
955 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
956 return 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
957 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
958
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
959 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
960 # Vector less than equla operator supports two modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
961 # . Comparion of corresponding values in two vectors
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
962 # . Comparing vectors values to a scalar ($Vector <= 2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
963 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
964 # Caveats:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
965 # . Comparison of a scalar to vector values is not allowed (2 <= $Vector2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
966 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
967 sub _VectorLessThanEqualOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
968 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
969
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
970 $ErrorMsg = "_VectorLessThanEqualOperator: Vector less than equal comparison failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
971 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
972
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
973 # Do the comparison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
974 my($ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
975 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
976
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
977 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
978 # $OrderFlipped is set to false for two vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
979 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
980 if ($This->{Values}[$Index] > $Other->{Values}[$Index]) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
981 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
982 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
983 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
984 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
985 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
986 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
987 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
988 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
989 # Scalar comparison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
990 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
991 if ($This->{Values}[$Index] > $Other) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
992 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
993 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
994 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
995 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
996 return 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
997 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
998
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
999 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1000 # Vector greatar than operator supports two modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1001 # . Comparion of corresponding values in two vectors
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1002 # . Comparing vectors values to a scalar ($Vector > 2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1003 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1004 # Caveats:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1005 # . Comparison of a scalar to vector values is not allowed (2 > $Vector2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1006 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1007 sub _VectorGreatarThanOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1008 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1009
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1010 $ErrorMsg = "_VectorGreatarThanOperator: Vector greatar than comparison failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1011 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1012
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1013 # Do the comparison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1014 my($ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1015 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1016
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1017 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1018 # $OrderFlipped is set to false for two vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1019 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1020 if ($This->{Values}[$Index] <= $Other->{Values}[$Index]) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1021 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1022 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1023 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1024 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1025 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1026 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1027 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1028 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1029 # Scalar comparison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1030 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1031 if ($This->{Values}[$Index] <= $Other) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1032 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1033 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1034 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1035 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1036 return 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1037 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1038
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1039 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1040 # Vector greatar than equal operator supports two modes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1041 # . Comparion of corresponding values in two vectors
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1042 # . Comparing vectors values to a scalar ($Vector >= 2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1043 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1044 # Caveats:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1045 # . Comparison of a scalar to vector values is not allowed (2 <= $Vector2)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1046 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1047 sub _VectorGreatarThanEqualOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1048 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1049
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1050 $ErrorMsg = "_VectorGreatarThanEqualOperator: Vector greatar than equal comparison failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1051 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1052
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1053 # Do the comparison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1054 my($ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1055 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1056
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1057 if ($OtherIsVector) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1058 # $OrderFlipped is set to false for two vectors...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1059 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1060 if ($This->{Values}[$Index] < $Other->{Values}[$Index]) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1061 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1062 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1063 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1064 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1065 else {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1066 if ($OrderFlipped) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1067 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1068 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1069 # Scalar comparison...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1070 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1071 if ($This->{Values}[$Index] < $Other) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1072 return 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1073 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1074 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1075 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1076 return 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1077 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1078
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1079 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1080 # Vector negative value operator returns a vector with values corresponding to
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1081 # negative values of a vector
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1082 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1083 sub _VectorNegativeValueOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1084 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1085
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1086 $ErrorMsg = "_VectorNegativeValueOperator: Vector negative value operation failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1087 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1088
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1089 # Take the negative value...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1090 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1091 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1092 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1093
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1094 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1095 $Vector->{Values}[$Index] = - $This->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1096 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1097 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1098 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1099
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1100 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1101 # Vector absolute value operator returns a vector with values corresponding to
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1102 # absolute values of a vector
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1103 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1104 sub _VectorAbsoluteValueOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1105 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1106
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1107 $ErrorMsg = "_VectorAbsoluteValueOperator: Vector absolute value operation failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1108 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1109
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1110 # Take the absolute value...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1111 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1112 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1113 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1114
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1115 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1116 $Vector->{Values}[$Index] = abs $This->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1117 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1118 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1119 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1120
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1121 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1122 # Vector exp natural base operator returns a vector with values corresponding to
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1123 # e raised to the power of values in a vector
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1124 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1125 sub _VectorExpNaturalBaseOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1126 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1127
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1128 $ErrorMsg = "_VectorExpNaturalBaseOperator: Vector exp operation failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1129 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1130
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1131 # Take the absolute value...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1132 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1133 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1134 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1135
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1136 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1137 $Vector->{Values}[$Index] = exp $This->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1138 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1139 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1140 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1141
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1142 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1143 # Vector log natural base operator returns a vector with values corresponding to
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1144 # log of values in a vector
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1145 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1146 sub _VectorLogNaturalBaseOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1147 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1148
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1149 $ErrorMsg = "_VectorLogNaturalBaseOperator: Vector log operation failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1150 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1151
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1152 # Take the absolute value...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1153 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1154 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1155 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1156
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1157 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1158 $Vector->{Values}[$Index] = log $This->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1159 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1160 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1161 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1162
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1163 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1164 # Vector cosine operator returns a vector with values corresponding to cosine of values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1165 # in a vector. Input vector values are assumed to be in radians.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1166 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1167 sub _VectorCosineOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1168 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1169
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1170 $ErrorMsg = "_VectorCosineOperator: Vector cos operation failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1171 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1172
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1173 # Take the absolute value...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1174 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1175 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1176 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1177
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1178 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1179 $Vector->{Values}[$Index] = cos $This->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1180 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1181 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1182 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1183
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1184 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1185 # Vector sine operator returns a vector with values corresponding to sine of values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1186 # in a vector. Input vector values are assumed to be in radians.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1187 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1188 sub _VectorSineOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1189 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1190
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1191 $ErrorMsg = "_VectorSineOperator: Vector sin operation failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1192 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1193
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1194 # Take the absolute value...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1195 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1196 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1197 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1198
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1199 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1200 $Vector->{Values}[$Index] = sin $This->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1201 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1202 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1203 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1204
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1205 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1206 # Vector square root returns a vector with values corresponding to sqrt of values
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1207 # in a vector.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1208 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1209 sub _VectorSquareRootOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1210 my($This, $Other, $OrderFlipped, $OtherIsVector, $ErrorMsg);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1211
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1212 $ErrorMsg = "_VectorSquareRootOperator: Vector sqrt operation failed";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1213 ($This, $Other, $OrderFlipped, $OtherIsVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1214
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1215 # Take the absolute value...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1216 my($Vector, $ThisSize, $Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1217 $Vector = $This->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1218 $ThisSize = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1219
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1220 for $Index (0 .. ($ThisSize -1)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1221 $Vector->{Values}[$Index] = sqrt $This->{Values}[$Index];
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1222 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1223 return $Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1224 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1225
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1226 # Turn vector into array for @{$Vector} operation...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1227 sub _VectorToArrayOperator {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1228 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1229
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1230 return \@{$This->{Values}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1231 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1232
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1233 # Turn vector into number for $#Vector operation: It's the size of vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1234 sub _NumifyVector {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1235 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1236
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1237 return $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1238 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1239
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1240 # Process parameters passed to overloaded operators...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1241 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1242 # For uninary operators, $SecondParameter is not defined.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1243 sub _ProcessOverloadedOperatorParameters {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1244 my($ErrorMsg, $FirstParameter, $SecondParameter, $ParametersOrderStatus, $CheckVectorSizesStatus) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1245 my($This, $Other, $OrderFlipped, $OtherIsVector, $CheckVectorSizes);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1246
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1247 ($This, $Other) = ($FirstParameter, $SecondParameter);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1248 $OrderFlipped = (defined($ParametersOrderStatus) && $ParametersOrderStatus) ? 1 : 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1249 $CheckVectorSizes = (defined $CheckVectorSizesStatus) ? $CheckVectorSizesStatus : 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1250
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1251 _ValidateVector($ErrorMsg, $This);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1252
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1253 $OtherIsVector = 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1254 if (defined($Other) && (ref $Other)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1255 # Make sure $Other is a vector...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1256 _ValidateVector($ErrorMsg, $Other);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1257 if ($CheckVectorSizes) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1258 _ValidateVectorSizesAreEqual($ErrorMsg, $This, $Other);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1259 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1260 $OtherIsVector = 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1261 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1262 return ($This, $Other, $OrderFlipped, $OtherIsVector);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1263 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1264
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1265 # Is it a vector object?
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1266 sub _IsVector {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1267 my($Object) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1268
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1269 return (Scalar::Util::blessed($Object) && $Object->isa($ClassName)) ? 1 : 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1270 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1271
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1272 # Make sure it's a vector reference...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1273 sub _ValidateVector {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1274 my($ErrorMsg, $Vector) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1275
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1276 if (!_IsVector($Vector)) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1277 croak "Error: ${ClassName}->${ErrorMsg}: Object must be a vector...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1278 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1279 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1280
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1281 # Make sure size of the two vectors contain the same number of values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1282 sub _ValidateVectorSizesAreEqual {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1283 my($ErrorMsg, $Vector1, $Vector2) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1284
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1285 if ($Vector1->GetSize() != $Vector2->GetSize()) {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1286 croak "Error: ${ClassName}->${ErrorMsg}: Size of the vectors must be same...";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1287 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1288 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1289
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1290 # Return a string containing vector values...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1291 sub StringifyVector {
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1292 my($This) = @_;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1293 my($VectorString, $FormatString, $PrintFormat, $Size, @ValuesFormat);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1294
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1295 $PrintFormat = (exists $This->{ValueFormat}) ? $This->{ValueFormat} : $ValueFormat;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1296
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1297 @ValuesFormat = ($PrintFormat) x scalar @{$This->{Values}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1298 $FormatString = join ' ', @ValuesFormat;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1299
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1300 $Size = $This->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1301
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1302 $VectorString = sprintf "<Size: $Size; Values: [ $FormatString ] >", @{$This->{Values}};
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1303
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1304 return $VectorString;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1305 }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1306
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1307 1;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1308
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1309 __END__
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1310
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1311 =head1 NAME
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1312
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1313 Vector
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1314
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1315 =head1 SYNOPSIS
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1316
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1317 use Vector;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1318
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1319 use Vector qw(:all);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1320
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1321 =head1 DESCRIPTION
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1322
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1323 B<Vector> class provides the following methods:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1324
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1325 new, AddValues, Copy, GetLength, GetMagnitude, GetNumOfNonZeroValues,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1326 GetPercentOfNonZeroValues, GetSize, GetValue, GetValues, GetX, GetXYZ, GetY,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1327 GetZ, IsVector, Normalize, SetValue, SetValuePrintFormat,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1328 SetX, SetXYZ, SetY, SetZ, StringifyVector, IsVector
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1329
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1330 The following functions are available:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1331
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1332 IsVector, SetValuePrintFormat UnitXVector, UnitYVector, UnitZVector, UnitVector,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1333 ZeroVector
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1334
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1335 The following operators are overloaded:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1336
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1337 "" 0+ bool
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1338 @{}
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1339 + - * / %
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1340 x .
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1341 == != < <= > >=
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1342 neg
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1343 abs exp log sqrt cos sin
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1344
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1345 =head2 FUNCTIONS
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1346
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1347 =over 4
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1348
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1349 =item B<new>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1350
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1351 $NewVector = new Vector();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1352 $NewVector = new Vector(@Values);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1353 $NewVector = new Vector(\@Values);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1354 $NewVector = new Vector($AnotherVector);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1355
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1356 Creates a new B<Vector> object containing I<Values> and returns B<NewVector> object.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1357 In case no I<Values> are specified, an empty B<Vector> is created.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1358
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1359 =item B<AddValues>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1360
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1361 $Vector->AddValues(@Values);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1362 $Vector->AddValues(\@Values);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1363 $Vector->AddValues($AnotherVector);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1364
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1365 Adds values to I<Vector> using an array, reference to an array or another vector and returns
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1366 I<Vector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1367
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1368 =item B<Copy>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1369
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1370 $NewVector = $Vector->Copy();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1371
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1372 Creates a copy of I<Vector> and returns I<NewVector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1373
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1374 =item B<GetLength>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1375
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1376 $Length = $Vector->GetLength();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1377
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1378 Returns I<Lengh> of a 3D I<Vector> corresponding to its dot product.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1379
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1380 =item B<GetMagnitude>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1381
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1382 $Length = $Vector->GetMagnitude();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1383
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1384 Returns I<Lengh> of a 3D I<Vector> corresponding to its dot product.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1385
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1386 =item B<GetNumOfNonZeroValues>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1387
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1388 $Value = $Vector->GetNumOfNonZeroValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1389
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1390 Returns number of non-zero values in I<Vector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1391
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1392 =item B<GetPercentOfNonZeroValues>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1393
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1394 $Value = $Vector->GetPercentOfNonZeroValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1395
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1396 Returns percent of non-zero values in I<Vector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1397
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1398 =item B<GetSize>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1399
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1400 $Size = $Vector->GetSize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1401
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1402 Returns size of a I<Vector> corresponding to number of its values.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1403
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1404 =item B<GetValue>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1405
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1406 $Value = $Vector->GetValues($Index);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1407
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1408 Returns vector B<Value> specified using I<Index> starting at 0.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1409
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1410 =item B<GetValues>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1411
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1412 @Values = $Vector->GetValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1413 $ValuesRef = $Vector->GetValues();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1414
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1415 Returns an array or a reference to an array containing all I<Vector> values.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1416
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1417 =item B<GetX>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1418
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1419 $X = $Vector->GetX();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1420
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1421 Returns B<X> value of a 3D I<Vector>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1422
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1423 =item B<GetXYZ>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1424
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1425 @XYZValues = $Vector->GetXYZ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1426 $XYZValuesRef = $Vector->GetXYZ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1427
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1428 Returns B<XYZ> values of a 3D I<Vector> as an array or a reference to an array
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1429 containing the values.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1430
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1431 =item B<GetY>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1432
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1433 $Y = $Vector->GetY();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1434
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1435 Returns B<Y> value of a 3D I<Vector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1436
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1437 =item B<GetZ>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1438
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1439 $Z = $Vector->GetZ();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1440
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1441 Returns B<Z> value of a 3D I<Vector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1442
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1443 =item B<IsVector>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1444
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1445 $Status = Vector::IsVector($Object);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1446
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1447 Returns 1 or 0 based on whether I<Object> is a B<Vector> object.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1448
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1449 =item B<Normalize>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1450
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1451 $Vector->Normalize();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1452
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1453 Normalizes a 3D I<Vector> by dividing its values by the length and returns I<Vector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1454
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1455 =item B<SetValue>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1456
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1457 $Vector->SetValue($Index, $Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1458
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1459 Sets a I<Vector> value specified by I<Index> to I<Value> and returns I<Vector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1460
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1461 =item B<SetValuePrintFormat>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1462
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1463 $Vector->SetValuePrintFormat($ValuePrintFormat);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1464 Vector::SetValuePrintFormat($ValuePrintFormat);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1465
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1466 Sets format for printing vector values for a specified I<Vector> or the whole class. Default
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1467 format: I<%g>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1468
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1469 =item B<SetX>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1470
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1471 $Vector->SetX($Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1472
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1473 Sets B<X> value of a 3D vector to I<Value> and returns I<Vector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1474
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1475 =item B<SetXYZ>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1476
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1477 $Vector->SetXYZ(@Values);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1478 $Vector->SetXYZ(\@Values);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1479 $Vector->SetXYZ($AnotherVector);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1480
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1481 Sets B<XYZ> values of a 3D vector and returns I<Vector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1482
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1483 =item B<SetY>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1484
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1485 $Vector->SetY($Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1486
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1487 Sets B<Y> value of a 3D vector to I<Value> and returns I<Vector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1488
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1489 =item B<SetZ>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1490
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1491 $Vector->SetZ($Value);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1492
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1493 Sets B<Z> value of a 3D vector to I<Value> and returns I<Vector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1494
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1495 =item B<StringifyVector>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1496
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1497 $String = $Vector->StringifyVector();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1498
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1499 Returns a string containing information about I<Vector> object.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1500
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1501 =item B<UnitVector>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1502
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1503 $UnitVector = UnitVector([$Size]);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1504 $UnitVector = Vector::UnitVector([$Size]);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1505
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1506 Returns a B<UnitVector> of I<Size>. Default size: I<3>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1507
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1508 =item B<UnitXVector>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1509
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1510 $UnitXVector = UnitXVector();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1511
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1512 Returns a 3D B<UnitXVector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1513
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1514 =item B<UnitYVector>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1515
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1516 $UnitYVector = UnitYVector();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1517
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1518 Returns a 3D B<UnitYVector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1519
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1520 =item B<UnitZVector>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1521
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1522 $UnitZVector = UnitZVector();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1523
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1524 Returns a 3D B<UnitZVector>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1525
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1526 =item B<ZeroVector>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1527
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1528 $UnitVector = ZeroVector([$Size]);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1529 $UnitVector = Vector::ZeroVector([$Size]);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1530
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1531 Returns a B<ZeroVector> of I<Size>. Default size: I<3>.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1532
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1533 =back
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1534
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1535 =head1 AUTHOR
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1536
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1537 Manish Sud <msud@san.rr.com>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1538
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1539 =head1 SEE ALSO
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1540
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1541 BitVector.pm
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1542
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1543 =head1 COPYRIGHT
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1544
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1545 Copyright (C) 2015 Manish Sud. All rights reserved.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1546
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1547 This file is part of MayaChemTools.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1548
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1549 MayaChemTools is free software; you can redistribute it and/or modify it under
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1550 the terms of the GNU Lesser General Public License as published by the Free
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1551 Software Foundation; either version 3 of the License, or (at your option)
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1552 any later version.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1553
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1554 =cut