// Numbas version: exam_results_page_options {"name": "24. Parallel Axis Theorem", "metadata": {"description": "

Homework set.  Application of Parallel Axis Theorem to find area Moment of Inertia

", "licence": "Creative Commons Attribution-ShareAlike 4.0 International"}, "duration": 0, "percentPass": 0, "showQuestionGroupNames": false, "shuffleQuestionGroups": false, "showstudentname": true, "question_groups": [{"name": "Group", "pickingStrategy": "all-ordered", "pickQuestions": 1, "questionNames": ["", "", "", ""], "variable_overrides": [[], [], [], []], "questions": [{"name": "Parallel Axis Theorem: common shapes", "extensions": ["geogebra"], "custom_part_types": [], "resources": [["question-resources/MOI_table.pdf", "/srv/numbas/media/question-resources/MOI_table.pdf"], ["question-resources/MOI_table.png", "/srv/numbas/media/question-resources/MOI_table.png"]], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "tags": ["Mechanics", "mechanics", "moment of inertia", "parallel axis theorem", "second moment of area", "Statics", "statics"], "metadata": {"description": "

Write expressions for the moment of inertia of simple shapes about various axes.

", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "

{geogebra_applet('j25dzmbq', [[\"A\",A],[\"shape\",index +1],[\"axis\",axis],[\"reference\",ref]])}

\n

Write an expression for the moment of inertia with respect to the {if(axis=1,\"centroidal \",\"\")}x axis for the {shape} with {description}.  

", "advice": "

Some cases are found in the table below.  For others use the parallel axis theorem.

\n

\\[I = \\bar{I} + A d^2\\]

\n

 where:

\n

$\\bar{I}$ is the centroidal moment of inertia, i.e., the moment of inertia of the shape with respect to an axis which is parallel to the desired axis and passes throught the shape's centroid.

\n

$A$ is the area of the shape.

\n

$d$ is the distance between the desired axis and the parallel centroidal axis.

\n

\n

\n

\n

\n

\n

", "rulesets": {}, "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true}, "constants": [], "variables": {"distances": {"name": "distances", "group": "Ungrouped variables", "definition": "let(d,string(down),u,string(up),[[\"0\",\"0\",\"0\",\"0\"],\n [d,d,d,d],\n [u,u,u,u],\n [\"0\",\"c\",\"c+(\"+d+\")\",\"c-(\"+u+\")\"],\n [\"0\",\"c\",\"c-\"+d,\"c+\"+u]])", "description": "", "templateType": "anything", "can_override": false}, "names": {"name": "names", "group": "Ungrouped variables", "definition": "[\"rectangle\",\"triangle\",\"circle\",\"semicircle\",\"quarter circle\"]", "description": "", "templateType": "anything", "can_override": false}, "ref": {"name": "ref", "group": "Ungrouped variables", "definition": "if(axis>3,random(1..3),0)", "description": "

The reference axis, needed for axis 4 and 5.  

\n

1 centroid

\n

2 bottom of shape

\n

3 top of shape

", "templateType": "anything", "can_override": false}, "shape": {"name": "shape", "group": "parts", "definition": "names[index]", "description": "", "templateType": "anything", "can_override": false}, "index": {"name": "index", "group": "Ungrouped variables", "definition": "random(0..4)", "description": "

rectangle, triangle, circle, semicircle, quarter circle

", "templateType": "anything", "can_override": false}, "area": {"name": "area", "group": "parts", "definition": "expression(areas[index])", "description": "", "templateType": "anything", "can_override": false}, "areas": {"name": "areas", "group": "Ungrouped variables", "definition": "[\"b*h\", \"b h / 2\", \"pi r^2\", \"pi r^2 /2\" , \"pi r^2 /4\"]", "description": "", "templateType": "anything", "can_override": false}, "maximums": {"name": "maximums", "group": "Ungrouped variables", "definition": "[\"h/2\",\n if(quadrant<2,\"2 h/3\",\"h/3\")\n ,\"r\",\n if(quadrant=0,\"(r-(4 r)/(3 pi))\",if(quadrant=2,\"(4 r)/(3 pi)\",\"r\")),\n if(quadrant<=1,\"(r-(4 r)/(3 pi))\", \"(4 r)/(3 pi)\")]", "description": "

Distance from centroid to the top of the shape.

\n

\n

maximums = {abs(y(A) / 2), Max(2 / 3 y(A), (-y(A)) / 3), radius, If(quadrant \u225f 0, radius - ybar, quadrant \u225f 1, radius, quadrant \u225f 2, ybar, quadrant \u225f 3, radius), If(quadrant ≤ 1, radius - ybar, ybar)}

", "templateType": "anything", "can_override": false}, "quadrant": {"name": "quadrant", "group": "parts", "definition": "if(A[0]>0 and A[1]>0,0,\n if(A[0]<0 and A[1] > 0, 1,\n if(A[0]<0 and A[1]<0,2,3)))", "description": "

Calculates which quadrant point A is in.  Needed to determine orientation of the triangle, semi and quarter circles.

", "templateType": "anything", "can_override": false}, "even_quadrant": {"name": "even_quadrant", "group": "Ungrouped variables", "definition": "mod(quadrant,2)=0 ", "description": "

usefull utility

", "templateType": "anything", "can_override": false}, "Ibars": {"name": "Ibars", "group": "Ungrouped variables", "definition": "[\"b*h^3/12\",\n \"b*h^3/36\", \n \"pi r^4/4\", \n if(even_quadrant,\"0.1098 r^4\",\"pi r^4/8\"),\n \"0.0549 r^4\"]", "description": "", "templateType": "anything", "can_override": false}, "minimums": {"name": "minimums", "group": "Ungrouped variables", "definition": "[\"h/2\",\n if(quadrant<2,\"h/3\",\"2 h/3\")\n ,\"r\",\n if(quadrant=0,\"(4 r)/(3 pi)\",if(quadrant=2,\"r-(4 r)/(3 pi)\",\"r\")),\n if(quadrant<=1,\"(4 r)/(3 pi)\", \"r-(4 r)/(3 pi)\")]", "description": "

distance from centroid to bottom of the shape

", "templateType": "anything", "can_override": false}, "Ibar": {"name": "Ibar", "group": "parts", "definition": "expression(Ibars[index])", "description": "", "templateType": "anything", "can_override": false}, "axis": {"name": "axis", "group": "Ungrouped variables", "definition": "random(1..5)", "description": "

1 through centroid

\n

2 bottom of shape

\n

3 top of shape

\n

4 below shape

\n

5 above shape

", "templateType": "anything", "can_override": false}, "down": {"name": "down", "group": "parts", "definition": "expression(minimums[index])", "description": "

distance from centroid to bottom of shape

", "templateType": "anything", "can_override": false}, "up": {"name": "up", "group": "parts", "definition": "expression(maximums[index])", "description": "", "templateType": "anything", "can_override": false}, "d": {"name": "d", "group": "parts", "definition": "expression(distances[axis-1][ref])", "description": "", "templateType": "anything", "can_override": false}, "description": {"name": "description", "group": "parts", "definition": "if(index<2,\"base b and height h\", \"radius r\")", "description": "", "templateType": "anything", "can_override": false}, "Ix": {"name": "Ix", "group": "parts", "definition": "(string(Ibar) + \"+ \" + string(area) + \"*(\"+ string(d) + \")^2\")", "description": "", "templateType": "anything", "can_override": false}, "A": {"name": "A", "group": "Ungrouped variables", "definition": "vector(random([2,3],[3,2],[-3,2],[-2,3])) random(-1,1)\n", "description": "", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "", "maxRuns": 100}, "ungrouped_variables": ["A", "index", "axis", "ref", "names", "areas", "Ibars", "maximums", "even_quadrant", "minimums", "distances"], "variable_groups": [{"name": "parts", "variables": ["shape", "area", "description", "Ibar", "up", "quadrant", "down", "d", "Ix"]}], "functions": {}, "preamble": {"js": "", "css": ""}, "parts": [{"type": "gapfill", "useCustomName": false, "customName": "", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

$\\var{if(axis=1,latex(\"\\\\bar\\{I\\}_x\"), latex(\"I_x\"))}= $ [[0]]

\n

Note: If your answer produces an error message, try putting an asterisk before parentheses, like so: b h * (h/2)^2 

\n

\n

\\[I_x=\\simplify{{expression(Ix)}}\\]

\n

", "gaps": [{"type": "jme", "useCustomName": true, "customName": "MOI", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "answer": "{expression(Ix)}", "showPreview": true, "checkingType": "absdiff", "checkingAccuracy": 0.001, "failureRate": 1, "vsetRangePoints": 5, "vsetRange": [0, 1], "checkVariableNames": true, "singleLetterVariables": true, "allowUnknownFunctions": false, "implicitFunctionComposition": false, "caseSensitive": false, "valuegenerators": []}], "sortAnswers": false}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}, {"name": "Parallel Axis Theorem: rectangles and triangles", "extensions": ["geogebra", "quantities"], "custom_part_types": [{"source": {"pk": 19, "author": {"name": "William Haynes", "pk": 2530}, "edit_page": "/part_type/19/edit"}, "name": "Engineering Accuracy with units", "short_name": "engineering-answer", "description": "

A value with units marked right if within an adjustable % error of the correct value.  Marked close if within a wider margin of error.

", "help_url": "", "input_widget": "string", "input_options": {"correctAnswer": "siground(settings['correctAnswer'],4)", "hint": {"static": true, "value": ""}, "allowEmpty": {"static": true, "value": true}}, "can_be_gap": true, "can_be_step": true, "marking_script": "mark:\nswitch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n\n\ninterpreted_answer:\nqty(student_scalar, student_units)\n\n\n\ncorrect_quantity:\nsettings[\"correctAnswer\"]\n\n\n\ncorrect_units:\nunits(correct_quantity)\n\n\nallowed_notation_styles:\n[\"plain\",\"en\"]\n\nmatch_student_number:\nmatchnumber(studentAnswer,allowed_notation_styles)\n\nstudent_scalar:\nmatch_student_number[1]\n\nstudent_units:\nreplace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")\n\ngood_units:\ntry(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n\n\nstudent_quantity:\nswitch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n\n\npercent_error:\ntry(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n \n\nright:\npercent_error <= settings['right']\n\n\nclose:\nright_sign and percent_error <= settings['close']\n\nright_sign:\nsign(student_scalar) = sign(correct_quantity)", "marking_notes": [{"name": "mark", "description": "This is the main marking note. It should award credit and provide feedback based on the student's answer.", "definition": "switch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n"}, {"name": "interpreted_answer", "description": "A value representing the student's answer to this part.", "definition": "qty(student_scalar, student_units)\n\n"}, {"name": "correct_quantity", "description": "", "definition": "settings[\"correctAnswer\"]\n\n"}, {"name": "correct_units", "description": "", "definition": "units(correct_quantity)\n"}, {"name": "allowed_notation_styles", "description": "", "definition": "[\"plain\",\"en\"]"}, {"name": "match_student_number", "description": "", "definition": "matchnumber(studentAnswer,allowed_notation_styles)"}, {"name": "student_scalar", "description": "", "definition": "match_student_number[1]"}, {"name": "student_units", "description": "

Modify the unit portion of the student's answer by

\n

1. replacing \"ohms\" with \"ohm\"  case insensitive

\n

2. replacing '-' with ' ' 

\n

3. replacing '°' with ' deg' 

\n

to allow answers like 10 ft-lb and 30°

", "definition": "replace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")"}, {"name": "good_units", "description": "", "definition": "try(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n"}, {"name": "student_quantity", "description": "

This fixes the student answer for two common errors.  

\n

If student_units are wrong  - replace with correct units

\n

If student_scalar has the wrong sign - replace with right sign

\n

If student makes both errors, only one gets fixed.

", "definition": "switch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n"}, {"name": "percent_error", "description": "", "definition": "try(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n "}, {"name": "right", "description": "", "definition": "percent_error <= settings['right']\n"}, {"name": "close", "description": "

Only marked close if the student actually has the right sign.

", "definition": "right_sign and percent_error <= settings['close']"}, {"name": "right_sign", "description": "", "definition": "sign(student_scalar) = sign(correct_quantity) "}], "settings": [{"name": "correctAnswer", "label": "Correct Quantity.", "help_url": "", "hint": "The correct answer given as a JME quantity.", "input_type": "code", "default_value": "", "evaluate": true}, {"name": "right", "label": "% Accuracy for right.", "help_url": "", "hint": "Question will be considered correct if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "0.2", "evaluate": true}, {"name": "close", "label": "% Accuracy for close.", "help_url": "", "hint": "Question will be considered close if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "1.0", "evaluate": true}, {"name": "C1", "label": "Close with units.", "help_url": "", "hint": "Partial Credit for close value with appropriate units.  if correct answer is 100 N and close is ±1%,
99  N is accepted.", "input_type": "percent", "default_value": "75"}, {"name": "C2", "label": "No units or wrong sign", "help_url": "", "hint": "Partial credit for forgetting units or using wrong sign.
If the correct answer is 100 N, both 100 and -100 N are accepted.", "input_type": "percent", "default_value": "50"}, {"name": "C3", "label": "Close, no units.", "help_url": "", "hint": "Partial Credit for close value but forgotten units.
This value would be close if the expected units were provided.  If the correct answer is 100 N, and close is ±1%,
99 is accepted.", "input_type": "percent", "default_value": "25"}], "public_availability": "always", "published": true, "extensions": ["quantities"]}], "resources": [["question-resources/triangle-rectangle.ggb", "/srv/numbas/media/question-resources/triangle-rectangle.ggb"]], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "tags": ["area moment of inertia", "Area moment of inertia", "mechanics", "Mechanics", "parallel axis theorem", "second moment of area", "Statics", "statics"], "metadata": {"description": "

Use the parallel axis theorem to find the area moment of inertia of a triangle and a rectangle about various axes.

", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "

{geogebra_applet('qqws9ffu', [['R1',R1],['R2',R2],['T1',T1],['T2',T2]])}

\n

Determine the moment of inertia of the rectangle and the triangle about the axes specified using the parallel axis theorem when necessary.  1 grid square = 1 {units}.

", "advice": "

For the x-axis

\n

Rectangle:

\n

$b = \\var{R_b} \\qquad h = \\var{R_h} \\qquad A = b \\cdot h = \\var{R_area}$

\n

$\\bar{I}_x = \\frac{1}{12}b h^3 = \\var{display(R_Ibarx')}$

\n

$I_x = \\bar{I}_x + A d^2$ where $d$ is the distance from the x-axis to the centroid of the rectangle: $d =\\var{qty(abs(R_c[1]),units)}$

\n

$I_x = \\var{display(R_ibarx')} + (\\var{R_area}) (\\var{qty(abs(R_c[1]),units)})^2 = \\var{display(R_Ix)}$

\n

Triangle:

\n

$b = \\var{T_b} \\qquad h = \\var{T_h} \\qquad A = b \\cdot h/2 = \\var{T_area}$

\n

$\\bar{I}_x = \\frac{1}{36}b h^3 = \\var{display(T_Ibarx')}$

\n

$I_x = \\bar{I}_x + A d^2$ where $d$ is the distance from the x-axis to the centroid of the triangle: $d =\\var{qty(abs(T_c[1]),units)}$

\n

$I_x = \\var{display(T_ibarx')} + (\\var{T_area}) (\\var{qty(abs(T_c[1]),units)})^2 = \\var{display(T_Ix)}$

\n

For the y-axis

\n

Follow a similar procedure to find the moments of inertia with respect to the y-axis.

\n

Rectangle: $I_y  = \\bar{I}_y + A d^2 = \\var{display(R_ibary')} + (\\var{R_area}) (\\var{qty(abs(R_c[0]),units)})^2 = \\var{display(R_Iy)}$

\n

Triangle:    $I_y  = \\bar{I}_y + A d^2 = \\var{display(T_ibary')} + (\\var{T_area}) (\\var{qty(abs(T_c[0]),units)})^2 = \\var{display(T_Iy)}$

", "rulesets": {}, "variables": {"T_b": {"name": "T_b", "group": "derived ", "definition": "qty(abs(T1[0]-T2[0]),units)", "description": "", "templateType": "anything"}, "T_h": {"name": "T_h", "group": "derived ", "definition": "qty(abs(T1[1]-T2[1]) ,units)", "description": "", "templateType": "anything"}, "R2": {"name": "R2", "group": "inputs", "definition": "R1 + random(-1,1) vector(random(3..8),random(3..8))\n", "description": "", "templateType": "anything"}, "R_c": {"name": "R_c", "group": "derived ", "definition": "R1 + (R2-R1)/2", "description": "

centroid

", "templateType": "anything"}, "R_xbar": {"name": "R_xbar", "group": "answers", "definition": "qty(R_c[0], units)\n", "description": "", "templateType": "anything"}, "R_Ibarx'": {"name": "R_Ibarx'", "group": "answers", "definition": "r_b r_h r_h r_h/12", "description": "", "templateType": "anything"}, "T1": {"name": "T1", "group": "inputs", "definition": "vector(random(-10..10),random(-10..10))", "description": "", "templateType": "anything"}, "R_area": {"name": "R_area", "group": "answers", "definition": "R_b R_h", "description": "", "templateType": "anything"}, "debug": {"name": "debug", "group": "inputs", "definition": "false", "description": "", "templateType": "anything"}, "units": {"name": "units", "group": "inputs", "definition": "'in'", "description": "", "templateType": "anything"}, "T_Ix": {"name": "T_Ix", "group": "answers", "definition": "T_ibarx' + T_area T_ybar T_ybar", "description": "", "templateType": "anything"}, "R_b": {"name": "R_b", "group": "derived ", "definition": "qty(abs(R1[0]-R2[0]) ,units)", "description": "", "templateType": "anything"}, "T_Ibarx'": {"name": "T_Ibarx'", "group": "answers", "definition": "t_b t_h t_h t_h/36", "description": "", "templateType": "anything"}, "T2": {"name": "T2", "group": "inputs", "definition": "T1 + random(-1,1) vector(random(3,6,9),random(3,6,9))\n\n", "description": "", "templateType": "anything"}, "R_Ibary'": {"name": "R_Ibary'", "group": "answers", "definition": "r_h r_b r_b r_b/12", "description": "", "templateType": "anything"}, "T_Ibary'": {"name": "T_Ibary'", "group": "answers", "definition": "t_h t_b t_b t_b/36", "description": "

s

", "templateType": "anything"}, "R1": {"name": "R1", "group": "inputs", "definition": "vector(random(-10..10),random(-10..10))", "description": "", "templateType": "anything"}, "R_Iy": {"name": "R_Iy", "group": "answers", "definition": "R_ibary' + R_area R_xbar R_xbar", "description": "", "templateType": "anything"}, "R_ybar": {"name": "R_ybar", "group": "answers", "definition": "qty(R_c[1], units) ", "description": "", "templateType": "anything"}, "T_c": {"name": "T_c", "group": "derived ", "definition": "T1 + (T2-T1)/3", "description": "", "templateType": "anything"}, "T_xbar": {"name": "T_xbar", "group": "answers", "definition": "qty(T_c[0], units) ", "description": "", "templateType": "anything"}, "T_area": {"name": "T_area", "group": "answers", "definition": "T_b T_h / 2\n", "description": "", "templateType": "anything"}, "T_Iy": {"name": "T_Iy", "group": "answers", "definition": "T_ibary' + T_area T_xbar T_xbar", "description": "", "templateType": "anything"}, "R_Ix": {"name": "R_Ix", "group": "answers", "definition": "R_ibarx' + R_area R_ybar R_ybar", "description": "", "templateType": "anything"}, "T_ybar": {"name": "T_ybar", "group": "answers", "definition": "qty(T_c[1], units) ", "description": "", "templateType": "anything"}, "version": {"name": "version", "group": "inputs", "definition": "random('x','y')", "description": "

v

", "templateType": "anything"}, "R_h": {"name": "R_h", "group": "derived ", "definition": "qty(abs(R1[1]-R2[1]) ,units)", "description": "", "templateType": "anything"}}, "variablesTest": {"condition": "not some(map(d=0,d,[R_c[0],R_c[1],T_c[0],T_c[1]]))\n// this prevents a centroid from landing on either axis", "maxRuns": 100}, "ungrouped_variables": [], "variable_groups": [{"name": "inputs", "variables": ["R1", "R2", "T1", "T2", "units", "version", "debug"]}, {"name": "derived ", "variables": ["R_b", "R_h", "T_b", "T_h", "R_c", "T_c"]}, {"name": "answers", "variables": ["R_area", "T_area", "R_xbar", "R_ybar", "T_xbar", "T_ybar", "R_Ibarx'", "R_Ibary'", "T_Ibary'", "T_Ibarx'", "R_Ix", "R_Iy", "T_Ix", "T_Iy"]}], "functions": {"display": {"parameters": [["q", "quantity"]], "type": "quantity", "language": "jme", "definition": "string(siground(q,4))"}}, "preamble": {"js": "", "css": ""}, "parts": [{"type": "gapfill", "useCustomName": false, "customName": "", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Find the area and centroidal coordinates of the rectangle.

\n

$A$ =  [[0]]   $\\bar{x}$ = [[1]]    $\\bar{y}$ = [[2]]

\n

$A = \\var{R_area} \\qquad   \\bar{x} = \\var{R_xbar} \\qquad \\bar{y} = \\var{R_ybar}$

\n

", "gaps": [{"type": "engineering-answer", "useCustomName": false, "customName": "", "marks": "2", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "R_area", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": false, "customName": "", "marks": "2", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "R_xbar", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": false, "customName": "", "marks": "2", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "R_ybar", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": false, "customName": "", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Find the centroidal moments of inertia for the rectangle:

\n

$\\bar{I}_{x'} = $ [[0]]   $\\qquad \\bar{I}_{y'} =$ [[1]] 

\n

{display(R_ibarx')} {display(R_ibary')}

\n

", "gaps": [{"type": "engineering-answer", "useCustomName": false, "customName": "", "marks": "3", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "R_ibarx'", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": false, "customName": "", "marks": "3", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "R_ibary'", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": false, "customName": "", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Apply the parallel axis theorem:

\n

$I = \\bar{I} + A d^2 $

\n

to find the moments of inertia with respect to the x- and y- axes for the rectangle .

\n

$I_x =$ [[0]]  $\\qquad I_y =$ [[1]] 

\n

{display(R_iy)} {display(R_ix)}

", "gaps": [{"type": "engineering-answer", "useCustomName": false, "customName": "", "marks": "4", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "R_Ix", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": false, "customName": "", "marks": "4", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "R_Iy", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": false, "customName": "", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Use a similar process to find the moment of inertia of the triangle with respect to the {version}-axis.

\n

$I_\\var{version}$ = [[0]]  {display(if(version='x',T_Ix,T_Iy))}

\n

", "gaps": [{"type": "engineering-answer", "useCustomName": false, "customName": "", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "if(version='x',T_Ix,T_Iy)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}, {"name": "Parallel Axis Theorem: semi and quarter circles", "extensions": ["geogebra", "quantities"], "custom_part_types": [{"source": {"pk": 19, "author": {"name": "William Haynes", "pk": 2530}, "edit_page": "/part_type/19/edit"}, "name": "Engineering Accuracy with units", "short_name": "engineering-answer", "description": "

A value with units marked right if within an adjustable % error of the correct value.  Marked close if within a wider margin of error.

", "help_url": "", "input_widget": "string", "input_options": {"correctAnswer": "siground(settings['correctAnswer'],4)", "hint": {"static": true, "value": ""}, "allowEmpty": {"static": true, "value": true}}, "can_be_gap": true, "can_be_step": true, "marking_script": "mark:\nswitch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n\n\ninterpreted_answer:\nqty(student_scalar, student_units)\n\n\n\ncorrect_quantity:\nsettings[\"correctAnswer\"]\n\n\n\ncorrect_units:\nunits(correct_quantity)\n\n\nallowed_notation_styles:\n[\"plain\",\"en\"]\n\nmatch_student_number:\nmatchnumber(studentAnswer,allowed_notation_styles)\n\nstudent_scalar:\nmatch_student_number[1]\n\nstudent_units:\nreplace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")\n\ngood_units:\ntry(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n\n\nstudent_quantity:\nswitch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n\n\npercent_error:\ntry(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n \n\nright:\npercent_error <= settings['right']\n\n\nclose:\nright_sign and percent_error <= settings['close']\n\nright_sign:\nsign(student_scalar) = sign(correct_quantity)", "marking_notes": [{"name": "mark", "description": "This is the main marking note. It should award credit and provide feedback based on the student's answer.", "definition": "switch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n"}, {"name": "interpreted_answer", "description": "A value representing the student's answer to this part.", "definition": "qty(student_scalar, student_units)\n\n"}, {"name": "correct_quantity", "description": "", "definition": "settings[\"correctAnswer\"]\n\n"}, {"name": "correct_units", "description": "", "definition": "units(correct_quantity)\n"}, {"name": "allowed_notation_styles", "description": "", "definition": "[\"plain\",\"en\"]"}, {"name": "match_student_number", "description": "", "definition": "matchnumber(studentAnswer,allowed_notation_styles)"}, {"name": "student_scalar", "description": "", "definition": "match_student_number[1]"}, {"name": "student_units", "description": "

Modify the unit portion of the student's answer by

\n

1. replacing \"ohms\" with \"ohm\"  case insensitive

\n

2. replacing '-' with ' ' 

\n

3. replacing '°' with ' deg' 

\n

to allow answers like 10 ft-lb and 30°

", "definition": "replace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")"}, {"name": "good_units", "description": "", "definition": "try(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n"}, {"name": "student_quantity", "description": "

This fixes the student answer for two common errors.  

\n

If student_units are wrong  - replace with correct units

\n

If student_scalar has the wrong sign - replace with right sign

\n

If student makes both errors, only one gets fixed.

", "definition": "switch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n"}, {"name": "percent_error", "description": "", "definition": "try(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n "}, {"name": "right", "description": "", "definition": "percent_error <= settings['right']\n"}, {"name": "close", "description": "

Only marked close if the student actually has the right sign.

", "definition": "right_sign and percent_error <= settings['close']"}, {"name": "right_sign", "description": "", "definition": "sign(student_scalar) = sign(correct_quantity) "}], "settings": [{"name": "correctAnswer", "label": "Correct Quantity.", "help_url": "", "hint": "The correct answer given as a JME quantity.", "input_type": "code", "default_value": "", "evaluate": true}, {"name": "right", "label": "% Accuracy for right.", "help_url": "", "hint": "Question will be considered correct if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "0.2", "evaluate": true}, {"name": "close", "label": "% Accuracy for close.", "help_url": "", "hint": "Question will be considered close if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "1.0", "evaluate": true}, {"name": "C1", "label": "Close with units.", "help_url": "", "hint": "Partial Credit for close value with appropriate units.  if correct answer is 100 N and close is ±1%,
99  N is accepted.", "input_type": "percent", "default_value": "75"}, {"name": "C2", "label": "No units or wrong sign", "help_url": "", "hint": "Partial credit for forgetting units or using wrong sign.
If the correct answer is 100 N, both 100 and -100 N are accepted.", "input_type": "percent", "default_value": "50"}, {"name": "C3", "label": "Close, no units.", "help_url": "", "hint": "Partial Credit for close value but forgotten units.
This value would be close if the expected units were provided.  If the correct answer is 100 N, and close is ±1%,
99 is accepted.", "input_type": "percent", "default_value": "25"}], "public_availability": "always", "published": true, "extensions": ["quantities"]}], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "tags": ["Area moment of inertia", "area moment of inertia", "mechancs", "moment of inertia", "parallel axis theorem", "Statics", "statics"], "metadata": {"description": "

Find the moment of inertia of semi and quarter circles using the parallel axis theorem.

", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "

{geogebra_applet('emjtbcxv',ggb_points)}

\n

Determine the moment of inertia and radius of gyration about the {axis}-axis for the {lower(names[pts[0]])} and the {lower(names[pts[1]])} .

\n

Grid units are [{units}]. 

\n

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
axisradiusareaibardICentroid
x{r[\"A\"]}{area[\"A\"]}{ibarx[\"A\"]}{d[\"x\"][\"A\"]}{Ix[\"A\"]}{siground(Centroid[\"A\"],3)}
y{r[\"A\"]}{area[\"A\"]}{ibary[\"A\"]}{d[\"y\"][\"A\"]}{Iy[\"A\"]}
\n

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
axisradiusareaibardICentroid
x{r[\"B\"]}{area[\"B\"]}{ibarx[\"B\"]}{d[\"x\"][\"B\"]}{Ix[\"B\"]}{siground(Centroid[\"B\"],3)}
y{r[\"B\"]}{area[\"B\"]}{ibary[\"B\"]}{d[\"y\"][\"B\"]}{Iy[\"B\"]}
\n

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
axisradiusareaibardICentroid
x{r[\"C\"]}{area[\"C\"]}{ibarx[\"C\"]}{d[\"x\"][\"C\"]}{Ix[\"C\"]}{siground(Centroid[\"C\"],3)}
y{r[\"C\"]}{area[\"C\"]}{ibary[\"C\"]}{d[\"y\"][\"C\"]}{Iy[\"C\"]}
", "advice": "
\n

For the circle:

\n

$r = \\var{q(r[\"A\"],units)} \\qquad A = \\pi r^2 = \\var{q(area[\"A\"],units+'^2')}$

\n

$\\bar{x} =\\var{q(centroid[\"A\"][0],units)} \\qquad \\bar{y} = \\var{q(centroid[\"A\"][1],units)}$

\n

Place a {if(axis=\"x\", \"horizontal\", \"vertical\" )} axis through the centroid of the {names[\"A\"]}.  The centroidal moment of inertia with respect to this axis is:

\n

$\\bar{I}  = \\dfrac{\\pi r^4}{4} = \\var{q(Ibar[axis][\"A\"],units+'^4')}$

\n

and the distance between the parallel axes is:

\n

$d = \\var{q(abs(d[axis][\"A\"]),units)}$

\n

Applying the parallel axis theorem and the definition of radius of gyration:

\n

$I_{\\var{axis}} = \\bar{I} + A d^2 = \\var{q(I'[axis][\"A\"],units+'^4')}$

\n

$k_{\\var{axis}} = \\sqrt{\\dfrac{I_{\\var{axis}}}{A}} = \\var{q(k[axis][\"A\"],units)}$

\n

\n
\n
\n

For the semi-circle:

\n

$r = \\var{q(r[\"B\"],units)} \\qquad A = \\dfrac{\\pi r^2}{2} = \\var{q(area[\"B\"],units+'^2')}$

\n

$\\bar{x} = \\var{latex( offset(0,centers[\"B\"], radii[\"B\"]))} \\var{q(centroid[\"B\"][0],units)} \\qquad \\bar{y} = \\var{latex( offset(1,centers[\"B\"], radii[\"B\"]))} \\var{q(centroid[\"B\"][1],units)}$

\n

Place a {if(axis=\"x\", \"horizontal\", \"vertical\" )} axis through the centroid of the {names[\"B\"]}.  The centroidal moment of inertia with respect to this axis is:

\n

$\\bar{I}  =\\var{ if(orientation=axis,latex(\"0.1098 r^4\"),latex(\"\\\\dfrac\\{\\\\pi r^4\\}\\{8\\}\")) }= \\var{q(Ibar[axis][\"B\"],units+'^4')}$

\n

and the distance between the parallel axes is:

\n

$d = \\var{q(abs(d[axis][\"B\"]),units)}$

\n

Applying the parallel axis theorem and the definition of radius of gyration:

\n

$I_{\\var{axis}} = \\bar{I} + A d^2 = \\var{q(I'[axis][\"B\"],units+'^4')}$

\n

$k_{\\var{axis}} = \\sqrt{\\dfrac{I_{\\var{axis}}}{A}} = \\var{q(k[axis][\"B\"],units)}$

\n

\n
\n
\n

For the quarter-circle:

\n

$r = \\var{q(r[\"C\"],units)} \\qquad A = \\dfrac{\\pi r^2}{4} = \\var{q(area[\"C\"],units+'^2')}$

\n

$\\bar{x} = \\var{latex( offset(0,centers[\"C\"], radii[\"C\"]))} \\var{q(centroid[\"C\"][0],units)} \\qquad \\bar{y} =\\var{latex( offset(1,centers[\"C\"], radii[\"C\"]))} \\var{q(centroid[\"C\"][1],units)}$

\n

Place a {if(axis=\"x\", \"horizontal\", \"vertical\" )} axis through the centroid of the {names[\"C\"]}.  The centroidal moment of inertia with respect to this axis is:

\n

$\\bar{I}  = 0.0549 r^4= \\var{q(Ibar[axis][\"C\"],units+'^4')}$

\n

and the distance between the parallel axes is:

\n

$d = \\var{q(abs(d[axis][\"C\"]),units)}$

\n

Applying the parallel axis theorem and the definition of radius of gyration:

\n

$I_{\\var{axis}} = \\bar{I} + A d^2 = \\var{q(I'[axis][\"C\"],units+'^4')}$

\n

$k_{\\var{axis}} = \\sqrt{\\dfrac{I_{\\var{axis}}}{A}} = \\var{q(k[axis][\"C\"],units)}$

\n
", "rulesets": {}, "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true}, "constants": [], "variables": {"area": {"name": "area", "group": "calculated", "definition": "[\"A\": pi r[\"A\"]^2, \"B\": pi r[\"B\"]^2/2, \"C\": pi r[\"C\"]^2 / 4]", "description": "", "templateType": "anything", "can_override": false}, "I0": {"name": "I0", "group": "Unnamed group", "definition": "qty(I'[axis][pts[0]],units+\"^4\")", "description": "", "templateType": "anything", "can_override": false}, "ky": {"name": "ky", "group": "calculated", "definition": "dict(map([p,sqrt(Iy[p]/area[p])], p, sort(pts)))", "description": "", "templateType": "anything", "can_override": false}, "Iy": {"name": "Iy", "group": "calculated", "definition": "dict(map([p,Ibary[p] + Area[p] * \n d[\"y\"][p]^2],p,sort(pts)))", "description": "", "templateType": "anything", "can_override": false}, "k1": {"name": "k1", "group": "Unnamed group", "definition": "qty(k[axis][pts[1]],units)", "description": "", "templateType": "anything", "can_override": false}, "Ibar": {"name": "Ibar", "group": "calculated", "definition": "[\"x\":Ibarx,\"y\":Ibary]", "description": "", "templateType": "anything", "can_override": false}, "kx": {"name": "kx", "group": "calculated", "definition": "dict(map([p,sqrt(Ix[p]/area[p])], p, sort(pts)))", "description": "", "templateType": "anything", "can_override": false}, "Ibarx": {"name": "Ibarx", "group": "calculated", "definition": "[\"A\": pi r[\"A\"]^4 /4, \"B\": if(orientation=\"x\",0.1098 r[\"B\"]^4, pi r[\"B\"]^4/8), \"C\": 0.0549 r[\"C\"]^4]", "description": "", "templateType": "anything", "can_override": false}, "I1": {"name": "I1", "group": "Unnamed group", "definition": "qty(I'[axis][pts[1]],units+\"^4\")", "description": "", "templateType": "anything", "can_override": false}, "Ibary": {"name": "Ibary", "group": "calculated", "definition": "[\"A\": pi r[\"A\"]^4 /4, \"B\": if(orientation=\"x\",pi r[\"B\"]^4/8,0.1098 r[\"B\"]^4), \"C\": 0.0549 r[\"C\"]^4]", "description": "", "templateType": "anything", "can_override": false}, "centers": {"name": "centers", "group": "Ungrouped variables", "definition": "dict(map([p,\n vector(random(-6..6),random(-5..5))],p,pts))", "description": "

randomly located center points for the shapes

", "templateType": "anything", "can_override": false}, "k0": {"name": "k0", "group": "Unnamed group", "definition": "qty(k[axis][pts[0]],units)", "description": "", "templateType": "anything", "can_override": false}, "radii": {"name": "radii", "group": "Ungrouped variables", "definition": "[\"A\":centers[\"A\"] + random(1..5) * vector(0,1), \"B\":centers[\"B\"] + random(1..5) * vector(random([1,0],[-1,0],[0,-1],[0,1])), \"C\":centers[\"C\"] + random(1..5) / sqrt(2) * vector(random([1,1],[-1,1],[-1,-1],[-1,1]))]", "description": "

This is a point which defines the radius.  The centroid is on a line passing through center and this point.

\n

The actual radius is the distance between center and radii.

\n

", "templateType": "anything", "can_override": false}, "names": {"name": "names", "group": "Ungrouped variables", "definition": "[\"A\":\"Circle\",\"B\":\"Semi-circle\",\"C\":\"Quarter-circle\"]\n", "description": "

the names of the shapes

", "templateType": "anything", "can_override": false}, "centroid": {"name": "centroid", "group": "calculated", "definition": "[\"A\": centers[\"A\"], \"B\": centers[\"B\"] + 4 (radii[\"B\"] - centers[\"B\"]) /3 /pi, \"C\": centers[\"C\"] + 4 sqrt(2) (radii[\"C\"] - centers[\"C\"]) /3 /pi]", "description": "

need sqrt(2) for quarter circle because of the way radii is defined

", "templateType": "anything", "can_override": false}, "axis": {"name": "axis", "group": "Ungrouped variables", "definition": "random('x','y')", "description": "

random choice for question 

", "templateType": "anything", "can_override": false}, "I'": {"name": "I'", "group": "calculated", "definition": "[\"x\":Ix,\"y\":Iy]", "description": "

Cant call it I because I is a reserved variable

", "templateType": "anything", "can_override": false}, "k": {"name": "k", "group": "calculated", "definition": "[\"x\":kx,\"y\":ky]", "description": "", "templateType": "anything", "can_override": false}, "units": {"name": "units", "group": "Ungrouped variables", "definition": "random('in','cm','ft','mm')", "description": "", "templateType": "anything", "can_override": false}, "d": {"name": "d", "group": "calculated", "definition": "[\"x\": dict(map([p,centroid[p][1]],p,sort(pts))), \"y\": dict(map([p,centroid[p][0]],p,sort(pts)))]", "description": "

d[\"x\"] gives distance from the y-axis

\n

This is the value needed for parallel axis theorem when calculating I_x

", "templateType": "anything", "can_override": false}, "Ix": {"name": "Ix", "group": "calculated", "definition": "dict(map([p,Ibarx[p] + Area[p] * \n d[\"x\"][p]^2],p,sort(pts)))", "description": "", "templateType": "anything", "can_override": false}, "orientation": {"name": "orientation", "group": "calculated", "definition": "if(centers[\"B\"][0] = radii[\"B\"][0],\"x\",\"y\")", "description": "

This determines which axis the semicircle's diameter is parallel to.

", "templateType": "anything", "can_override": false}, "debug": {"name": "debug", "group": "Ungrouped variables", "definition": "false", "description": "", "templateType": "anything", "can_override": false}, "pts": {"name": "pts", "group": "Ungrouped variables", "definition": "shuffle([\"A\",\"B\",\"C\"])", "description": "

this is where the randomizing of the shapes occurs.

", "templateType": "anything", "can_override": false}, "ggb_points": {"name": "ggb_points", "group": "Ungrouped variables", "definition": "map([p,centers[p]],p,pts) +\nmap(['R'+p,radii[p]],p,pts)[0..2]+\nmap(['R'+p,centers[p]],p,pts)[2..3]", "description": "

The problem is about two shapes randomly selected, which are the first two values in the pts array.

\n

The first map is the center coordinates for all three shapes.

\n

the second map is the random radii for the first two shapes,

\n

The last map sets the radius of the third shapes to its center, which hides it in GGB.

\n

\n

map([p,centers[p]],p,pts) +
map(['R'+p,radii[p]],p,pts)[0..2]+
map(['R'+p,centers[p]],p,pts)[2..3]

", "templateType": "anything", "can_override": false}, "r": {"name": "r", "group": "calculated", "definition": "dict(map([p,round(abs(centers[p]-radii[p]))],p,pts))", "description": "

the radii of the three shapes

", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "", "maxRuns": 100}, "ungrouped_variables": ["pts", "axis", "ggb_points", "names", "centers", "radii", "units", "debug"], "variable_groups": [{"name": "calculated", "variables": ["r", "area", "centroid", "Ibarx", "Iy", "Ibary", "Ix", "ky", "kx", "Ibar", "k", "I'", "d", "orientation"]}, {"name": "Unnamed group", "variables": ["I0", "I1", "k0", "k1"]}], "functions": {"": {"parameters": [], "type": "number", "language": "jme", "definition": ""}, "q": {"parameters": [["q", "number"], ["u", "string"]], "type": "string", "language": "jme", "definition": "siground(qty(q,u),4)"}, "offset": {"parameters": [["way", "number"], ["c", "vector"], ["d", "vector"]], "type": "string", "language": "jme", "definition": "let(dir,sign(d[way]-c[way]),r,siground(abs(c-d),3),\n if(dir=0,'', c[way] + \"\\\\textrm{ \" + units + \"\\} \" + if(dir=1,\"+\",\"-\") + \n\"\\\\dfrac\\{4r\\}\\{3\\\\pi\\} =\"))"}}, "preamble": {"js": "", "css": ""}, "parts": [{"type": "gapfill", "useCustomName": true, "customName": "{names[pts[0]]}", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

$I_\\var{axis}$ =  [[0]]   $k_\\var{axis}$ =  [[1]]  

\n

{siground(I0,4)} {siground(k0,4)}

", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "I", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "I0", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "k", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "k0", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": true, "customName": "{names[pts[1]]}", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

$I_\\var{axis}$ =  [[0]]   $k_\\var{axis}$ =  [[1]]  

\n

{siground(I1,4)} {siground(k1,4)}

", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "I", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "I1", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "k", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": false, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "k1", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}, {"name": "Moment of inertia of a composite shape: U or T", "extensions": ["geogebra", "quantities", "weh"], "custom_part_types": [{"source": {"pk": 19, "author": {"name": "William Haynes", "pk": 2530}, "edit_page": "/part_type/19/edit"}, "name": "Engineering Accuracy with units", "short_name": "engineering-answer", "description": "

A value with units marked right if within an adjustable % error of the correct value.  Marked close if within a wider margin of error.

", "help_url": "", "input_widget": "string", "input_options": {"correctAnswer": "siground(settings['correctAnswer'],4)", "hint": {"static": true, "value": ""}, "allowEmpty": {"static": true, "value": true}}, "can_be_gap": true, "can_be_step": true, "marking_script": "mark:\nswitch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n\n\ninterpreted_answer:\nqty(student_scalar, student_units)\n\n\n\ncorrect_quantity:\nsettings[\"correctAnswer\"]\n\n\n\ncorrect_units:\nunits(correct_quantity)\n\n\nallowed_notation_styles:\n[\"plain\",\"en\"]\n\nmatch_student_number:\nmatchnumber(studentAnswer,allowed_notation_styles)\n\nstudent_scalar:\nmatch_student_number[1]\n\nstudent_units:\nreplace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")\n\ngood_units:\ntry(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n\n\nstudent_quantity:\nswitch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n\n\npercent_error:\ntry(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n \n\nright:\npercent_error <= settings['right']\n\n\nclose:\nright_sign and percent_error <= settings['close']\n\nright_sign:\nsign(student_scalar) = sign(correct_quantity)", "marking_notes": [{"name": "mark", "description": "This is the main marking note. It should award credit and provide feedback based on the student's answer.", "definition": "switch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n"}, {"name": "interpreted_answer", "description": "A value representing the student's answer to this part.", "definition": "qty(student_scalar, student_units)\n\n"}, {"name": "correct_quantity", "description": "", "definition": "settings[\"correctAnswer\"]\n\n"}, {"name": "correct_units", "description": "", "definition": "units(correct_quantity)\n"}, {"name": "allowed_notation_styles", "description": "", "definition": "[\"plain\",\"en\"]"}, {"name": "match_student_number", "description": "", "definition": "matchnumber(studentAnswer,allowed_notation_styles)"}, {"name": "student_scalar", "description": "", "definition": "match_student_number[1]"}, {"name": "student_units", "description": "

Modify the unit portion of the student's answer by

\n

1. replacing \"ohms\" with \"ohm\"  case insensitive

\n

2. replacing '-' with ' ' 

\n

3. replacing '°' with ' deg' 

\n

to allow answers like 10 ft-lb and 30°

", "definition": "replace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")"}, {"name": "good_units", "description": "", "definition": "try(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n"}, {"name": "student_quantity", "description": "

This fixes the student answer for two common errors.  

\n

If student_units are wrong  - replace with correct units

\n

If student_scalar has the wrong sign - replace with right sign

\n

If student makes both errors, only one gets fixed.

", "definition": "switch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n"}, {"name": "percent_error", "description": "", "definition": "try(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n "}, {"name": "right", "description": "", "definition": "percent_error <= settings['right']\n"}, {"name": "close", "description": "

Only marked close if the student actually has the right sign.

", "definition": "right_sign and percent_error <= settings['close']"}, {"name": "right_sign", "description": "", "definition": "sign(student_scalar) = sign(correct_quantity) "}], "settings": [{"name": "correctAnswer", "label": "Correct Quantity.", "help_url": "", "hint": "The correct answer given as a JME quantity.", "input_type": "code", "default_value": "", "evaluate": true}, {"name": "right", "label": "% Accuracy for right.", "help_url": "", "hint": "Question will be considered correct if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "0.2", "evaluate": true}, {"name": "close", "label": "% Accuracy for close.", "help_url": "", "hint": "Question will be considered close if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "1.0", "evaluate": true}, {"name": "C1", "label": "Close with units.", "help_url": "", "hint": "Partial Credit for close value with appropriate units.  if correct answer is 100 N and close is ±1%,
99  N is accepted.", "input_type": "percent", "default_value": "75"}, {"name": "C2", "label": "No units or wrong sign", "help_url": "", "hint": "Partial credit for forgetting units or using wrong sign.
If the correct answer is 100 N, both 100 and -100 N are accepted.", "input_type": "percent", "default_value": "50"}, {"name": "C3", "label": "Close, no units.", "help_url": "", "hint": "Partial Credit for close value but forgotten units.
This value would be close if the expected units were provided.  If the correct answer is 100 N, and close is ±1%,
99 is accepted.", "input_type": "percent", "default_value": "25"}], "public_availability": "always", "published": true, "extensions": ["quantities"]}], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "tags": ["mechanics", "Mechanics", "moment of inerta", "parallel axis theorem", "second moment of area", "Statics", "statics"], "metadata": {"description": "

Calculate the moment of inertia of a composite shape consiting of two rectangles about the x or y-axis.  Parallel axis theorem is often required.

", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "

A composite shape is drawn to scale below.  Grid units are [{units}].

\n

{geogebra_applet('ez5xyd5w',[['A',A],['B',B]])}

\n
\n

Dimensions:

\n

Rectangle 1: $b_1 = \\var{b1} \\qquad h_1 = \\var{h1}$

\n

Rectangle 2:  $b_2 = \\var{b2}\\qquad h_2 = \\var{h2}$ {if(B[1]<A[1],'Removed','')}

\n

Area:

\n

$A_1 = b_1 h_1 = \\var{A1}$  

\n

$A_2 = b_2 h_2 = \\var{A2}$ {if(B[1]<A[1],'Removed','')}

\n

$A_t = A_1 + A_2 = \\var{A1} +  \\var{if(B[1]<A[1],'–','')} \\var{A2} = \\var{A_t}$

\n

For the x-axis:

\n

$I_{1x} = \\frac{1}{3}b_1 h_1^3 = \\var{siground(I1x,4)}$

\n

$I_{2x} = \\bar{I} + A d^2 =  \\frac{1}{12} (\\var{B2}) (\\var{H2})^3 +(\\var{A2}) (\\var{dx})^2 = \\var{siground(I2x,4)} $  {if(B[1]<A[1],'Removed','')}

\n

$I_x = I_{1x} + I_{2x} = \\var{siground(I1x,4)} +  \\var{if(B[1]<A[1],'–','')}  \\var{siground(I2x,4)} = \\var{siground(I_tx,4)}$

\n

$k_x = \\sqrt{\\frac{I_x}{A}}  = \\var{siground(kx,4)}$

\n

For the centroidal y'-axis:

\n

$I_{1y'} = \\frac{1}{12}h_1 b_1^3  = \\var{siground(I1y,4)}$

\n

$I_{2y'} = \\frac{1}{12}h_2 b_2^3  = \\var{siground(I2y,4)} $ {if(B[1]<A[1],'Removed','')}

\n

$\\bar{I}_{y'} = I_{1y'} + I_{2y'} = \\var{siground(I1y,4)} + \\var{if(B[1]<A[1],'–','')} \\var{siground(I2y,4)} = \\var{siground(Ibar_y',4)}$

\n

For the y-axis, using the parallel axis theorem:

\n

$I_y = \\bar{I}_{y'}+ A d^2 = \\var{siground(Ibar_y',4)} + (\\var{A_t}) (\\var{dy})^2 =  \\var{siground(I_ty,4)}$

\n

$k_y = \\sqrt{\\frac{I_y}{A}}  = \\var{siground(ky,4)}$

\n
", "advice": "

Dimensions:

\n

$b_1 = \\var{b1} \\qquad h_1 = \\var{h1}\\\\b_2 = \\var{b2}\\qquad h_2 = \\var{h2}$

\n

Area:

\n

$A_1 = b_1 h_1 = \\var{A1}$  

\n

$A_2 = b_2 h_2 = \\var{A2}$ {if(B[1]<A[1],'Removed','')}

\n

$A_t = A_1 + A_2 = \\var{A1} +  \\var{if(B[1]<A[1],'–','')} \\var{A2} = \\var{A_t}$

\n

For the x-axis:

\n
\n

$I_{1x} = \\frac{1}{3}b_1 h_1^3 = \\var{siground(I1x,4)}$

\n

$I_{2x} = \\bar{I} + A d^2 =  \\frac{1}{12} (\\var{B2}) (\\var{H2})^3 +(\\var{A2}) (\\var{dx})^2 = \\var{siground(I2x,4)} $  {if(B[1]<A[1],'Removed','')}

\n

$I_x = I_{1x} + I_{2x} = \\var{siground(I1x,4)} +  \\var{if(B[1]<A[1],'–','')}  \\var{siground(I2x,4)} = \\var{siground(I_tx,4)}$

\n

$k_x = \\sqrt{\\frac{I_x}{A}}  = \\var{siground(kx,4)}$

\n
\n
\n

For the centroidal y'-axis:

\n

$I_{1y'} = \\frac{1}{12}h_1 b_1^3  = \\var{siground(I1y,4)}$

\n

$I_{2y'} = \\frac{1}{12}h_2 b_2^3  = \\var{siground(I2y,4)} $ {if(B[1]<A[1],'Removed','')}

\n

$\\bar{I}_{y'} = I_{1y'} + I_{2y'} = \\var{siground(I1y,4)} + \\var{if(B[1]<A[1],'–','')} \\var{siground(I2y,4)} = \\var{siground(Ibar_y',4)}$

\n

For the y-axis, using the parallel axis theorem:

\n

$I_y = \\bar{I}_{y'}+ A d^2 = \\var{siground(Ibar_y',4)} + (\\var{A_t}) (\\var{dy})^2 =  \\var{siground(I_ty,4)}$

\n

$k_y = \\sqrt{\\frac{I_y}{A}}  = \\var{siground(ky,4)}$

\n
", "rulesets": {}, "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true}, "constants": [], "variables": {"A": {"name": "A", "group": "inputs", "definition": "vector(random(0.5..6#0.5),random(1..9))", "description": "

This point is at the half width of rectangle 1

", "templateType": "anything", "can_override": false}, "b1": {"name": "b1", "group": "Ungrouped variables", "definition": "qty(2 A[0],units)", "description": "

base of rectangle 1

", "templateType": "anything", "can_override": false}, "I2y": {"name": "I2y", "group": "Ungrouped variables", "definition": " h2 b2 b2 b2/12", "description": "", "templateType": "anything", "can_override": false}, "units": {"name": "units", "group": "inputs", "definition": "random('in','ft','mm','cm','m')", "description": "", "templateType": "anything", "can_override": false}, "debug": {"name": "debug", "group": "inputs", "definition": "false", "description": "", "templateType": "anything", "can_override": false}, "A_t": {"name": "A_t", "group": "Ungrouped variables", "definition": "A1+ if(B[1]>A[1],1,-1) A2", "description": "", "templateType": "anything", "can_override": false}, "b2": {"name": "b2", "group": "Ungrouped variables", "definition": "qty(2 B[0],units)\n", "description": "

base of rectangle 2

", "templateType": "anything", "can_override": false}, "dy": {"name": "dy", "group": "Ungrouped variables", "definition": "qty(max(A[0],B[0]),units)", "description": "

half width of shape - distance from centroid to y axis.

", "templateType": "anything", "can_override": false}, "ky": {"name": "ky", "group": "Ungrouped variables", "definition": "qty(sqrt(scalar(I_ty/A_t)),units)", "description": "", "templateType": "anything", "can_override": false}, "I_tx": {"name": "I_tx", "group": "Ungrouped variables", "definition": "I1x + if(B[1]>A[1],1,-1) I2x", "description": "

total moment of inertia wrt

", "templateType": "anything", "can_override": false}, "Ibar_y'": {"name": "Ibar_y'", "group": "Ungrouped variables", "definition": "I1y + if(B[1]>A[1],1,-1) I2y", "description": "", "templateType": "anything", "can_override": false}, "h2": {"name": "h2", "group": "Ungrouped variables", "definition": "qty(abs(A[1]-B[1]),units)", "description": "

height of rectangle 2

", "templateType": "anything", "can_override": false}, "I_ty": {"name": "I_ty", "group": "Ungrouped variables", "definition": "( I1y + if(B[1]>A[1],1,-1) I2y ) + A_t dy dy", "description": "

I_bar_y + A d^2

", "templateType": "anything", "can_override": false}, "dx": {"name": "dx", "group": "Ungrouped variables", "definition": "qty((A[1]+B[1])/2,units)", "description": "

distance to centroid of rectangle 2 for parallel axis theorem

", "templateType": "anything", "can_override": false}, "kx": {"name": "kx", "group": "Ungrouped variables", "definition": "qty(sqrt(scalar(I_tx/A_t)),units)", "description": "", "templateType": "anything", "can_override": false}, "B": {"name": "B", "group": "inputs", "definition": "vector(random(0.5..6#0.5),random(1..9))", "description": "

This point is at the half width of rectangle 2.

", "templateType": "anything", "can_override": false}, "A1": {"name": "A1", "group": "Ungrouped variables", "definition": "B1 H1", "description": "

area of rectangle 1

", "templateType": "anything", "can_override": false}, "I2x": {"name": "I2x", "group": "Ungrouped variables", "definition": "(b2 * h2 * h2 * h2)/12 + A2 dx dx\n", "description": "

distance up to centroid of rectangle 2

", "templateType": "anything", "can_override": false}, "axis": {"name": "axis", "group": "inputs", "definition": "random('x','y')", "description": "", "templateType": "anything", "can_override": false}, "h1": {"name": "h1", "group": "Ungrouped variables", "definition": "qty(A[1],units)", "description": "

height of rectangle 1

\n

", "templateType": "anything", "can_override": false}, "I1x": {"name": "I1x", "group": "Ungrouped variables", "definition": "b1 * h1 * h1 * h1/3", "description": "", "templateType": "anything", "can_override": false}, "I1y": {"name": "I1y", "group": "Ungrouped variables", "definition": "(h1 b1 b1 b1)/12", "description": "", "templateType": "anything", "can_override": false}, "A2": {"name": "A2", "group": "Ungrouped variables", "definition": "B2 H2 ", "description": "", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "not(B[0]>A[0] and B[1]Determine the total area of the shape.

\n

$A$ = [[0]]   {A_t}

", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "A", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "abs(A_t)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": true, "customName": "Moment of Inertia", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Determine the moment of inertia of the shape with respect to the {axis}-axis.

\n

$I_\\var{axis} =$ [[0]]  {siground(if(axis='x',I_tx,I_ty),4)}

\n

", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "$I_\\var{axis} $", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "if(axis='x',I_tx,I_ty)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": true, "customName": "Radius of gyration", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Determine the radius of gyration of the shape with respect to the {axis}-axis.

\n

$k_\\var{axis} =$ [[0]]  {siground(if(axis='x',kx,ky),4)}

", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "$k_\\var{axis}$", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "if(axis='x',kx,ky)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}]}], "allowPrinting": true, "navigation": {"allowregen": true, "reverse": true, "browse": true, "allowsteps": true, "showfrontpage": false, "showresultspage": "oncompletion", "navigatemode": "sequence", "onleave": {"action": "none", "message": ""}, "preventleave": true, "startpassword": ""}, "timing": {"allowPause": true, "timeout": {"action": "none", "message": ""}, "timedwarning": {"action": "none", "message": ""}}, "feedback": {"showactualmark": true, "showtotalmark": true, "showanswerstate": true, "allowrevealanswer": true, "advicethreshold": 0, "intro": "", "reviewshowscore": true, "reviewshowfeedback": true, "reviewshowexpectedanswer": true, "reviewshowadvice": true, "feedbackmessages": []}, "diagnostic": {"knowledge_graph": {"topics": [], "learning_objectives": []}, "script": "diagnosys", "customScript": ""}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "extensions": ["geogebra", "quantities", "weh"], "custom_part_types": [{"source": {"pk": 19, "author": {"name": "William Haynes", "pk": 2530}, "edit_page": "/part_type/19/edit"}, "name": "Engineering Accuracy with units", "short_name": "engineering-answer", "description": "

A value with units marked right if within an adjustable % error of the correct value.  Marked close if within a wider margin of error.

", "help_url": "", "input_widget": "string", "input_options": {"correctAnswer": "siground(settings['correctAnswer'],4)", "hint": {"static": true, "value": ""}, "allowEmpty": {"static": true, "value": true}}, "can_be_gap": true, "can_be_step": true, "marking_script": "mark:\nswitch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n\n\ninterpreted_answer:\nqty(student_scalar, student_units)\n\n\n\ncorrect_quantity:\nsettings[\"correctAnswer\"]\n\n\n\ncorrect_units:\nunits(correct_quantity)\n\n\nallowed_notation_styles:\n[\"plain\",\"en\"]\n\nmatch_student_number:\nmatchnumber(studentAnswer,allowed_notation_styles)\n\nstudent_scalar:\nmatch_student_number[1]\n\nstudent_units:\nreplace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")\n\ngood_units:\ntry(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n\n\nstudent_quantity:\nswitch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n\n\npercent_error:\ntry(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n \n\nright:\npercent_error <= settings['right']\n\n\nclose:\nright_sign and percent_error <= settings['close']\n\nright_sign:\nsign(student_scalar) = sign(correct_quantity)", "marking_notes": [{"name": "mark", "description": "This is the main marking note. It should award credit and provide feedback based on the student's answer.", "definition": "switch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n"}, {"name": "interpreted_answer", "description": "A value representing the student's answer to this part.", "definition": "qty(student_scalar, student_units)\n\n"}, {"name": "correct_quantity", "description": "", "definition": "settings[\"correctAnswer\"]\n\n"}, {"name": "correct_units", "description": "", "definition": "units(correct_quantity)\n"}, {"name": "allowed_notation_styles", "description": "", "definition": "[\"plain\",\"en\"]"}, {"name": "match_student_number", "description": "", "definition": "matchnumber(studentAnswer,allowed_notation_styles)"}, {"name": "student_scalar", "description": "", "definition": "match_student_number[1]"}, {"name": "student_units", "description": "

Modify the unit portion of the student's answer by

\n

1. replacing \"ohms\" with \"ohm\"  case insensitive

\n

2. replacing '-' with ' ' 

\n

3. replacing '°' with ' deg' 

\n

to allow answers like 10 ft-lb and 30°

", "definition": "replace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")"}, {"name": "good_units", "description": "", "definition": "try(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n"}, {"name": "student_quantity", "description": "

This fixes the student answer for two common errors.  

\n

If student_units are wrong  - replace with correct units

\n

If student_scalar has the wrong sign - replace with right sign

\n

If student makes both errors, only one gets fixed.

", "definition": "switch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n"}, {"name": "percent_error", "description": "", "definition": "try(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n "}, {"name": "right", "description": "", "definition": "percent_error <= settings['right']\n"}, {"name": "close", "description": "

Only marked close if the student actually has the right sign.

", "definition": "right_sign and percent_error <= settings['close']"}, {"name": "right_sign", "description": "", "definition": "sign(student_scalar) = sign(correct_quantity) "}], "settings": [{"name": "correctAnswer", "label": "Correct Quantity.", "help_url": "", "hint": "The correct answer given as a JME quantity.", "input_type": "code", "default_value": "", "evaluate": true}, {"name": "right", "label": "% Accuracy for right.", "help_url": "", "hint": "Question will be considered correct if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "0.2", "evaluate": true}, {"name": "close", "label": "% Accuracy for close.", "help_url": "", "hint": "Question will be considered close if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "1.0", "evaluate": true}, {"name": "C1", "label": "Close with units.", "help_url": "", "hint": "Partial Credit for close value with appropriate units.  if correct answer is 100 N and close is ±1%,
99  N is accepted.", "input_type": "percent", "default_value": "75"}, {"name": "C2", "label": "No units or wrong sign", "help_url": "", "hint": "Partial credit for forgetting units or using wrong sign.
If the correct answer is 100 N, both 100 and -100 N are accepted.", "input_type": "percent", "default_value": "50"}, {"name": "C3", "label": "Close, no units.", "help_url": "", "hint": "Partial Credit for close value but forgotten units.
This value would be close if the expected units were provided.  If the correct answer is 100 N, and close is ±1%,
99 is accepted.", "input_type": "percent", "default_value": "25"}], "public_availability": "always", "published": true, "extensions": ["quantities"]}], "resources": [["question-resources/MOI_table.pdf", "/srv/numbas/media/question-resources/MOI_table.pdf"], ["question-resources/MOI_table.png", "/srv/numbas/media/question-resources/MOI_table.png"], ["question-resources/triangle-rectangle.ggb", "/srv/numbas/media/question-resources/triangle-rectangle.ggb"]]}