Difference between revisions of "DynamicImages3"
Line 68: | Line 68: | ||
# |
# |
||
# Note: we could fill in any polygon by adding more sides |
# Note: we could fill in any polygon by adding more sides |
||
+ | |||
+ | |||
+ | # |
||
+ | # Integral as area under the curve example |
||
+ | # |
||
+ | $gr2 = init_graph(-5,-5,5,5,grid=>[10,10],axes=>[0,0],pixels=>[400,400]); |
||
+ | $gr2->lb('reset'); |
||
+ | foreach my $i (1..4) { |
||
+ | $gr2->lb( new Label(-4.7,$i,$i,'black','center','middle')); |
||
+ | $gr2->lb( new Label(-4.7,-$i,-$i,'black','center','middle')); |
||
+ | $gr2->lb( new Label($i,-4.7,$i,'black','center','middle')); |
||
+ | $gr2->lb( new Label(-$i,-4.7,-$i,'black','center','middle')); |
||
+ | } |
||
+ | $gr2->lb( new Label(4.7,0.2,'x','black','center','middle')); |
||
+ | $gr2->lb( new Label(0.2,4.7,'y','black','center','middle')); |
||
+ | $gr2->new_color("lightblue",214,230,244); |
||
+ | $gr2->new_color("darkblue", 100,100,255); |
||
+ | add_functions($gr2,"sqrt(x)+1 for x in <0,5> using color:darkblue and weight:2"); |
||
+ | $gr2->moveTo(1,2); |
||
+ | $gr2->lineTo(1,0,"darkblue",2); |
||
+ | $gr2->lineTo(4,0,"darkblue",2); |
||
+ | $gr2->lineTo(4,3,"darkblue",2); |
||
+ | $gr2->fillRegion([1.1,0.1,"lightblue"]); |
||
Line 87: | Line 110: | ||
<p> |
<p> |
||
<b>Setup:</b> |
<b>Setup:</b> |
||
− | We specify that the Context should be <code>......</code>, and define the answer to be a formula. |
||
+ | The examples to the left use the features provided by <code>WWPlot.pm</code>, which is part of the base code of WeBWorK. The perl code used to create these graphs, <code>GD.pm</code>, is the engine used by <code>WWPlot.pm</code>. The features provided by <code>WWPlot.pm</code> are very accessible and easy to use (for example, you specify everything in terms of coordinates on the graph, and WWPlot.pm translates all of your commands into pixel coordinates on the image file that is generated). Sometimes, though, you may want to access features provided by <code>GD.pm</code> directly or need a feature not currently provided by <code>WWPlot.pm</code>. Below, we give a few examples of how to access features of <code>GD.pm</code> directly via the <code>->im-></code> command, and how to convert from graph coordinates to pixel coordinates on the image file via the x-coordinate to pixel converter <code>ii()</code> and the y-coordinate to pixel converter <code>jj()</code>. |
||
</p> |
</p> |
||
<p> |
<p> |
Revision as of 19:09, 23 February 2010
Dynamic Graphic Images, with Filled Regions
This code snippet shows the essential PG code to check student answers that are equations. Note that these are insertions, not a complete PG file. This code will have to be incorporated into the problem file on which you are working.
PG problem file | Explanation |
---|---|
DOCUMENT(); loadMacros( "PGstandard.pl", "PGgraphmacros.pl", # "PGnumericalmacros.pl", # might be useful ); TEXT(beginproblem()); |
Initialization:
To do ..(what you are doing)........., we don't have to change the
tagging and documentation section of the problem file.
In the initialization section, we need to include the macros file |
$xmin = random(-3,-1,1); $xmax = random(1,3,1); $ymin = random(-3,-1,1); $ymax = random(1,3,1); # # filled triangle with dark border # $gr1 = init_graph(-4,-4,4,4,grid=>[8,8],axes=>[0,0],pixels=>[400,400]); $gr1->new_color("lightgreen",156,215,151); # RGB $gr1->new_color("darkgreen", 0, 86, 34); $gr1->moveTo($xmin,$ymin); $gr1->lineTo($xmax,$ymin,"darkgreen",2); # bottom edge $gr1->lineTo($xmin,$ymax,"darkgreen",2); # hypotenuse $gr1->lineTo($xmin,$ymin,"darkgreen",2); # left edge $gr1->fillRegion([$xmin+0.1,$ymin+0.1,"lightgreen"]); # # Note: we could fill in any polygon by adding more sides # # Integral as area under the curve example # $gr2 = init_graph(-5,-5,5,5,grid=>[10,10],axes=>[0,0],pixels=>[400,400]); $gr2->lb('reset'); foreach my $i (1..4) { $gr2->lb( new Label(-4.7,$i,$i,'black','center','middle')); $gr2->lb( new Label(-4.7,-$i,-$i,'black','center','middle')); $gr2->lb( new Label($i,-4.7,$i,'black','center','middle')); $gr2->lb( new Label(-$i,-4.7,-$i,'black','center','middle')); } $gr2->lb( new Label(4.7,0.2,'x','black','center','middle')); $gr2->lb( new Label(0.2,4.7,'y','black','center','middle')); $gr2->new_color("lightblue",214,230,244); $gr2->new_color("darkblue", 100,100,255); add_functions($gr2,"sqrt(x)+1 for x in <0,5> using color:darkblue and weight:2"); $gr2->moveTo(1,2); $gr2->lineTo(1,0,"darkblue",2); $gr2->lineTo(4,0,"darkblue",2); $gr2->lineTo(4,3,"darkblue",2); $gr2->fillRegion([1.1,0.1,"lightblue"]); # # A filled in circle # $gr3 = init_graph(-5,-5,5,5,grid=>[10,10],axes=>[0,0],pixels=>[400,400]); $gr3->new_color("lightblue", 214,230,244); # RGB $gr3->new_color("darkblue", 100,100,255); add_functions($gr3, " sqrt(4-x^2) for x in <-2,2> using color:darkblue and weight:2", "-sqrt(4-x^2) for x in <-2,2> using color:darkblue and weight:2" ); $gr3->fillRegion([0.1,0.1,"lightblue"]); |
Setup:
The examples to the left use the features provided by
# filled rectangle with dark border # uses some macros directly from GD.pm # $gr2 = init_graph(-4,-4,4,4,grid=>[8,8],axes=>[0,0],pixels=>[300,300]); $lightblue = $gr2->im->colorAllocate(148,201,255); $darkblue = $gr2->im->colorAllocate(100,100,255); # # translate from graph coordinates to pixel coordinates # $xminpixel = $gr2->ii($xmin); $xmaxpixel = $gr2->ii($xmax); $yminpixel = $gr2->jj($ymin); $ymaxpixel = $gr2->jj($ymax); # # use filledRectangle and rectangle from GD.pm, accessed via ->im-> # $gr2->im->filledRectangle($xminpixel,$yminpixel,$xmaxpixel,$ymaxpixel,$lightblue); $gr2->im->rectangle($xminpixel,$yminpixel,$xmaxpixel,$ymaxpixel,$darkblue); ################ # Graph # # filled circle with dark border # uses some macros directly from GD.pm # $r = random(1,4,1); # radius $gr3 = init_graph(-5,-5,5,5,grid=>[10,10],axes=>[0,0],pixels=>[400,400]); $gr3->lb('reset'); foreach my $i (1..4) { $gr3->lb( new Label(-4.7,$i,$i,'black','center','middle')); $gr3->lb( new Label(-4.7,-$i,-$i,'black','center','middle')); $gr3->lb( new Label($i,-4.7,$i,'black','center','middle')); $gr3->lb( new Label(-$i,-4.7,-$i,'black','center','middle')); } $gr3->lb( new Label(4.7,0.2,'x','black','center','middle')); $gr3->lb( new Label(0.2,4.7,'y','black','center','middle')); $lightblue = $gr3->im->colorAllocate(148,201,255); $darkblue = $gr3->im->colorAllocate(100,100,255); # # use arc() and fillToBorder() from GD.pm, accessed via ->im-> # $cxpixel = $gr3->ii(0); # x-coordinate of center $cypixel = $gr3->jj(0); # x-coordinate of center $dxpixel = $gr3->ii($r) - $gr3->ii(-$r); # diameter of ellipse, x-direction $dypixel = $gr3->jj($r) - $gr3->jj(-$r); # diameter of ellipse, y-direction # # 0 to 360 are degrees $gr3->im->arc($cxpixel,$cypixel,$dxpixel,$dypixel,0,360,$darkblue); $gr3->im->fillToBorder($cxpixel,$cypixel,$darkblue,$lightblue); |
BEGIN_TEXT $BCENTER \{ image( insertGraph($gr1), height=>400, width=>400, tex_size=>800 ) \} $ECENTER $PAR $BCENTER \{ image( insertGraph($gr2), height=>400, width=>400, tex_size=>800 ) \} $ECENTER $PAR $BCENTER \{ image( insertGraph($gr3), height=>400, width=>400, tex_size=>800 ) \} $ECENTER END_TEXT |
Main Text: The problem text section of the file is as we'd expect. |
$showPartialCorrectAnswers = 1; ENDDOCUMENT(); |
Answer Evaluation: As is the answer. |