Spacecurve1

From WeBWorK_wiki
Revision as of 15:50, 3 January 2012 by Paultpearson (talk | contribs)
Jump to navigation Jump to search

A Parametric Curve in Space

Click to enlarge

This PG code shows how to ask a parametric curve question with three answer blanks and use MultiAnswer to check the answer.

  • Download file: File:Spacecurve1.txt (change the file extension from txt to pg when you save it)
  • File location in NPL: FortLewis/Authoring/Templates/Parametric/Spacecurve1.pg


Templates by Subject Area

PG problem file Explanation

Problem tagging data

Problem tagging:

DOCUMENT();      

loadMacros(
"PGstandard.pl",
"MathObjects.pl",
"parserMultiAnswer.pl",
"AnswerFormatHelp.pl",
);

TEXT(beginproblem());

Initialization: Since we will have multiple answer blanks that depend on each other, we need to use parserMultiAnswer.pl.

Context("Numeric");
Context()->variables->are(t=>"Real");
Context()->variables->set(t=>{limits=>[0,10]});

$a = random(-5,-2,1);
$x = Formula("$a * t**2");
$y = Formula("0");
$z = Formula("t");

$multians = MultiAnswer($x, $y, $z)->with(
  singleResult => 1,
  checker => sub {
      my ( $correct, $student, $self ) = @_;
      my ( $xstu, $ystu, $zstu ) = @{$student};
      return 0 unless $xstu->isFormula;
      if (($xstu==$a*$zstu**2) && ($ystu==0)) {
            return 1;
      } else {
            return 0;
      }
  }
);

Setup: We use singleResult => 1 since it doesn't make sense to say that x(t) is correct but z(t) is incorrect since they depend on one another. First, we check that the student hasn't fed us a bogus constant solution such as x=y=z=0 by requiring the x-coordinate to be a formula (not a constant) via return 0 unless $xstu->isFormula;. Then, we check that the student's answers satisfy the parametric equation.

Context()->texStrings;
BEGIN_TEXT
Find a parametrization of the curve \( x = $a z^2 \) 
in the \(xz\)-plane.  Use \( t \) as the 
parameter for all of your answers.
$BR
$BR
\( x(t) = \) \{$multians->ans_rule(20)\}
\{ AnswerFormatHelp("formulas") \}
$BR
\( y(t) = \) \{$multians->ans_rule(20)\}
\{ AnswerFormatHelp("formulas") \}
$BR
\( z(t) = \) \{$multians->ans_rule(20)\}
\{ AnswerFormatHelp("formulas") \}
END_TEXT
Context()->normalStrings;

Main Text: Notice that we use $multians->ans_rule(20) (instead of just ans_rule(20)) so that the multianswer object is aware of all of the answer blanks.

$showPartialCorrectAnswers = 0;

ANS($multians->cmp());

Answer Evaluation:

Context()->texStrings;
BEGIN_SOLUTION
${PAR}SOLUTION:${PAR}
Solution explanation goes here.
END_SOLUTION
Context()->normalStrings;

COMMENT('MathObject version.');

ENDDOCUMENT();

Solution:

Templates by Subject Area