VectorParametric2
Motion and Velocity with a Parametric Curve
This PG code shows how to construct a custom answer checker that extracts the component functions from the student's answer and makes some derivative calculations with them.
- Download file: File:VectorParametric2.txt (change the file extension from txt to pg when you save it)
- File location in NPL:
FortLewis/Authoring/Templates/Parametric/VectorParametric2.pg
PG problem file | Explanation |
---|---|
Problem tagging: |
|
DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "parserVectorUtils.pl", "AnswerFormatHelp.pl", ); TEXT(beginproblem()); |
Initialization:
Although not necessary for the code below, we load |
Context("Vector2D"); #Context("Vector"); # for 3D vectors Context()->variables->are(t=>"Real"); Context()->variables->set(t=>{limits=>[0,5]}); Context()->flags->set( ijk=>0 ); $answer = Vector("<2t,(2t)^2>"); |
Setup: We choose not to display the answer using ijk notation. |
Context()->texStrings; BEGIN_TEXT Find a vector parametric function \( \vec{r}(t) \) for a bug that moves along the parabola \( y = x^2 \) with velocity \( \vec{v}(t) = \langle 2, 8t \rangle \) for all \( t \). $BR $BR \( \vec{r}(t) = \) \{ ans_rule(20) \} \{ AnswerFormatHelp("vectors") \} END_TEXT Context()->normalStrings; |
Main Text: |
$showPartialCorrectAnswers = 1; sub components { my $V = shift; $V = $V->perl; if ( $V =~ m/Value/ ) { $V =~ s/Value::Vector->new~~(//g; $V = substr($V, 0, -1); $V =~ s/Value::Real->new//g; $V =~ s/~~$//g; $V =~ s/ //g; return split(',',$V); } else { $V =~ s/~~* i~~)/~~),/g; $V =~ s/~~* j~~)/~~),/g; $V =~ s/~~* k~~)/~~),/g; $V =~ s/~~$//g; $V =~ s/ //g; $V = substr($V, 0, -1); return split(',',$V); } } sub mycheck { my ($correct, $student, $ansHash) = @_; my @r = components($student); my $xstu = Formula("$r[0]"); my $ystu = Formula("$r[1]"); if ( ($xstu->D('t')==Formula("2")) && ($ystu->D('t')==Formula("8t")) ) { return 1; } else { return 0; } } ANS( $answer->cmp( checker=>~~&mycheck ) ); |
Answer Evaluation:
The subroutine components |
Context()->texStrings; BEGIN_SOLUTION ${PAR}SOLUTION:${PAR} Solution explanation goes here. END_SOLUTION Context()->normalStrings; COMMENT('MathObject version.'); ENDDOCUMENT(); |
Solution: |