version 1.82, 2011/11/21 20:20:48
|
version 1.84, 2011/11/21 21:45:32
|
Line 837 sub start_functionplotvectorrule {
|
Line 837 sub start_functionplotvectorrule {
|
&Apache::edit::text_arg('Tip not attached to object:','nottippoint', |
&Apache::edit::text_arg('Tip not attached to object:','nottippoint', |
$token,'16').'<br />'. |
$token,'16').'<br />'. |
&Apache::edit::text_arg('Length:','length', |
&Apache::edit::text_arg('Length:','length', |
$token,'16'). |
$token,'30'). |
&Apache::edit::text_arg('Angle:','angle', |
|
$token,'16'). |
|
&Apache::edit::text_arg('Absolute error length:','lengtherror', |
&Apache::edit::text_arg('Absolute error length:','lengtherror', |
$token,'8'). |
$token,'8').'<br />'. |
|
&Apache::edit::text_arg('Angle:','angle', |
|
$token,'30'). |
&Apache::edit::text_arg('Absolute error angle:','angleerror', |
&Apache::edit::text_arg('Absolute error angle:','angleerror', |
$token,'8'). |
$token,'8'). |
&Apache::edit::end_row(); |
&Apache::edit::end_row(); |
Line 912 sub start_functionplotvectorsumrule {
|
Line 912 sub start_functionplotvectorsumrule {
|
&Apache::edit::text_arg('Comma-separated list of vectors:','vectors', |
&Apache::edit::text_arg('Comma-separated list of vectors:','vectors', |
$token,'30').'<br />'. |
$token,'30').'<br />'. |
&Apache::edit::text_arg('Sum vector length:','length', |
&Apache::edit::text_arg('Sum vector length:','length', |
$token,'16'). |
$token,'30'). |
|
&Apache::edit::text_arg('Absolute error length:','lengtherror', |
|
$token,'8').'<br />'. |
&Apache::edit::text_arg('Sum vector angle:','angle', |
&Apache::edit::text_arg('Sum vector angle:','angle', |
$token,'16'). |
$token,'30'). |
&Apache::edit::text_arg('Error length:','lengtherror', |
&Apache::edit::text_arg('Absolute error angle:','angleerror', |
$token,'8'). |
|
&Apache::edit::text_arg('Error angle:','angleerror', |
|
$token,'8'). |
$token,'8'). |
&Apache::edit::end_row(); |
&Apache::edit::end_row(); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
Line 1356 sub fpr_d2fdx2 {
|
Line 1356 sub fpr_d2fdx2 {
|
$arg)]; |
$arg)]; |
} |
} |
|
|
|
sub fpr_vectorcoords { |
|
my ($arg)=@_; |
|
$arg=~s/\W//gs; |
|
$arg=ucfirst($arg); |
|
my $id=$Apache::inputtags::response[-1]; |
|
my $partid=$Apache::inputtags::part; |
|
my $internalid = $partid.'_'.$id; |
|
return ($env{'form.HWVAL_'.$internalid.'_'.$arg.'Start_x'}, |
|
$env{'form.HWVAL_'.$internalid.'_'.$arg.'End_x'}, |
|
$env{'form.HWVAL_'.$internalid.'_'.$arg.'Start_y'}, |
|
$env{'form.HWVAL_'.$internalid.'_'.$arg.'End_y'}); |
|
} |
|
|
|
sub fpr_objectcoords { |
|
my ($arg)=@_; |
|
$arg=~s/\W//gs; |
|
$arg=ucfirst($arg); |
|
my $id=$Apache::inputtags::response[-1]; |
|
my $partid=$Apache::inputtags::part; |
|
my $internalid = $partid.'_'.$id; |
|
return ($env{'form.HWVAL_'.$internalid.'_'.$arg.'_x'}, |
|
$env{'form.HWVAL_'.$internalid.'_'.$arg.'_y'}); |
|
} |
|
|
|
sub fpr_vectorlength { |
|
my ($arg)=@_; |
|
my ($xs,$xe,$ys,$ye)=&fpr_vectorcoords($arg); |
|
return sqrt(($xe-$xs)*($xe-$xs)+($ye-$ys)*($ye-$ys)); |
|
} |
|
|
|
sub fpr_vectorangle { |
|
my ($arg)=@_; |
|
my ($xs,$xe,$ys,$ye)=&fpr_vectorcoords($arg); |
|
my $angle=57.2957795*atan2(($ye-$ys),($xe-$xs)); |
|
if ($angle<0) { $angle=360+$angle; } |
|
return $angle; |
|
} |
|
|
sub vectorcoords { |
sub vectorcoords { |
my ($id,$label)=@_; |
my ($id,$label)=@_; |
Line 1528 sub sumcheck {
|
Line 1565 sub sumcheck {
|
$sumy+=$ry; |
$sumy+=$ry; |
} |
} |
&addlog("Sum vector ($sumx,$sumy)"); |
&addlog("Sum vector ($sumx,$sumy)"); |
|
if ($length ne '') { |
|
&addlog("Checking length $length with error $lengtherror"); |
|
$length=&Apache::run::run($length,$safeeval); |
|
&addlog("Evaluated to $length"); |
|
my $thislength=&vectorlength($sumx,$sumy); |
|
&addlog("Actual length $thislength"); |
|
if (abs($length-$thislength)>$lengtherror) { |
|
&setfailed($label); |
|
return 0; |
|
} |
|
} |
|
if ($angle ne '') { |
|
&addlog("Checking angle $angle with error $angleerror"); |
|
$angle=&Apache::run::run($angle,$safeeval); |
|
&addlog("Evaluated to $angle"); |
|
my $thisangle=&vectorangle($sumx,$sumy); |
|
&addlog("Actual angle $thisangle"); |
|
my $anglediff=abs($thisangle-$angle); |
|
&addlog("Angle difference: $anglediff"); |
|
if ($anglediff>360.-$anglediff) { |
|
$anglediff=360.-$anglediff; |
|
} |
|
&addlog("Smallest angle difference: $anglediff"); |
|
if ($anglediff>$angleerror) { |
|
&setfailed($label); |
|
return 0; |
|
} |
|
} |
&addlog("Rule $label passed."); |
&addlog("Rule $label passed."); |
return 1; |
return 1; |
} |
} |