From: dpvc v. a. <we...@ma...> - 2005-06-05 23:26:34
|
Log Message: ----------- Better handling of delimiters that are explicitly set byt he user. Fixed an incorrect call during object class promotion. Added ability to sepcify that a vector is a Column Vector. Modified Files: -------------- pg/lib/Value: Vector.pm Revision Data ------------- Index: Vector.pm =================================================================== RCS file: /webwork/cvs/system/pg/lib/Value/Vector.pm,v retrieving revision 1.16 retrieving revision 1.17 diff -Llib/Value/Vector.pm -Llib/Value/Vector.pm -u -r1.16 -r1.17 --- lib/Value/Vector.pm +++ lib/Value/Vector.pm @@ -52,8 +52,17 @@ unless Value::isNumber($x); } } - return $self->formula($p) if $isFormula; - bless {data => $p}, $class; + if ($isFormula) { + my $v = $self->formula($p); + if (ref($self) && $self->{ColumnVector}) { + $v->{tree}{ColumnVector} = 1; + $v->{tree}{open} = $v->{tree}{close} = undef; + } + return $v; + } + my $v = bless {data => $p}, $class; + $v->{ColumnVector} = 1 if ref($self) && $self->{ColumnVector}; + return $v; } # @@ -136,7 +145,7 @@ sub cross { my ($l,$r,$flag) = @_; - if ($l->promotePrecedence($r)) {return $r->dot($l,!$flag)} + if ($l->promotePrecedence($r)) {return $r->cross($l,!$flag)} ($l,$r) = (promote($l)->data,promote($r)->data); Value::Error("Vector must be in 3-space for cross product") unless scalar(@{$l}) == 3 && scalar(@{$r}) == 3; @@ -239,8 +248,8 @@ sub stringify { my $self = shift; - return $self->TeX(undef,$self->{open},$self->{close}) if $$Value::context->flag('StringifyAsTeX'); - return $self->string(undef,$self->{open},$self->{close}) + return $self->TeX if $$Value::context->flag('StringifyAsTeX'); + return $self->string(undef,$self->{open},$self->{close}); }; sub string { @@ -248,7 +257,7 @@ return $self->ijk($ijk_string) if ($self->{ijk} || $equation->{ijk} || $$Value::context->flag("ijk")); my $def = ($equation->{context} || $$Value::context)->lists->get('Vector'); - my $open = shift || $def->{open}; my $close = shift || $def->{close}; + my $open = shift || $def->{open}; my $close = shift || $def->{close}; my @coords = (); foreach my $x (@{$self->data}) { if (Value::isValue($x)) {push(@coords,$x->string($equation))} else {push(@coords,$x)} @@ -260,12 +269,17 @@ my $self = shift; my $equation = shift; return $self->ijk if ($self->{ijk} || $equation->{ijk} || $$Value::context->flag("ijk")); my $def = ($equation->{context} || $$Value::context)->lists->get('Vector'); - my $open = shift || $def->{open}; my $close = shift || $def->{close}; + my $open = shift || $self->{open} || $def->{open}; + my $close = shift || $self->{close} || $def->{close}; my @coords = (); foreach my $x (@{$self->data}) { if (Value::isValue($x)) {push(@coords,$x->TeX($equation))} else {push(@coords,$x)} } - return '\left'.$open.join(',',@coords).'\right'.$close; + return '\left'.$open.join(',',@coords).'\right'.$close unless $self->{ColumnVector}; + $def = ($equation->{context} || $$Value::context)->lists->get('Matrix'); + $open = shift || $self->{open} || $def->{open}; + $close = shift || $self->{close} || $def->{close}; + return '\left'.$open.'\begin{array}{c}'.join('\\\\',@coords).'\\\\\end{array}\right'.$close; } sub ijk { |