// Numbas version: exam_results_page_options {"name": "Internal Force: distributed load", "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
\n1. replacing \"ohms\" with \"ohm\" case insensitive
\n2. replacing '-' with ' '
\n3. replacing '°' with ' deg'
\nto 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.
\nIf student_units are wrong - replace with correct units
\nIf student_scalar has the wrong sign - replace with right sign
\nIf 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%,Find the shear, normal force and bending moment at a point in a beam supporting a uniformly distributed load.
", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "The frame shown supports a uniformly distributed load $w = \\var{load}$. Member $BC$ is {BC} long.
\nDetermine the internal forces at point $D$ which is located {BD} to the right of point $B$.
\n{applet}
", "advice": "Find the reactions B and C.
\nDraw a Free body diagram of beam $BC$.
\n{fbd1}
\nNote that member $AB$ is a two-force member, so force $AB$ acts along its axis.
\nReplace the distributed load with an equivalent concentrated. The equivalent load acts at the center of member $BC$ with magnitude:
\n$W = w \\cdot \\overline{BC} = (\\var{load}) (\\var{BC}) = \\var{Q_W}$.
\n\nLet the length of member $BC = \\ell = \\var{BC}$, then solve the equilibrium equations to find the reactions at $B$ and $C$.
\n$\\begin{align}\\Sigma M_C & = 0 &\\Sigma F_x &= 0 &\\Sigma F_y &= 0\\\\AB_y \\cdot \\ell &= W \\cdot \\dfrac {\\ell}{2} & C_x &=AB_x & C_y &= W -AB_y \\\\AB \\sin \\var{abs(alpha)}°& = \\dfrac{ W }{2}& C_x &= AB \\cos \\var{abs(alpha)}° & C_y &= W - AB \\sin \\var{abs(alpha)}° \\\\ AB &= \\var{display(Q_AB)} & C_x &= \\var{display(abs(Q_cx))}\\var{if(F_AB[0]>0,latex('\\\\leftarrow'),latex('\\\\rightarrow'))} & C_y &= \\var{display(Q_Cy)} \\var{if(F_AB[1]>0,latex('\\\\uparrow'),latex('\\\\downarrow'))}\\end{align}$
\n\nTake an imaginary cut through member BC at point D and draw a free body diagram of the right (or left) portion.
\n{fbd2}
\nThe length of segment $DC$ is $\\var{CD}$. There will be unknown internal shear ($V$), bending moment ($M_D$) and normal force ($P$) at the cut. Assume that they act in the 'positive' directions established by the sign convention for shear and bending moments.
\nNote that the downward force on this section of the beam ($W'$) is due to the distributed force acting on this portion of the beam only and acts at the centroid of the loading.
\n$W' = w \\cdot \\overline{DC} = (\\var{load}) (\\var{BC-BD}) = \\var{display(Q_W')}$
\nSolve for the internal forces at D.
\n$\\begin{align}\\Sigma M_D & = 0 &\\Sigma F_x &= 0 &\\Sigma F_y &= 0\\\\ M_D &= C_y (\\var{CD}) - W'(\\var{CD/2})& P &= \\var{if(F_AB[0]>0,latex('-'),'')} C_x & V &= W'-C_y\\\\ &= \\var{display(Q_MD)} & &= \\var{display(-Q_Cx)} & &= \\var{display(Q_V)} \\end{align}$
\n", "rulesets": {}, "extensions": ["geogebra", "quantities"], "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true}, "constants": [], "variables": {"BC": {"name": "BC", "group": "Inputs", "definition": "qty(random(4..12#2),units[1])", "description": "", "templateType": "anything", "can_override": false}, "units": {"name": "units", "group": "Ungrouped variables", "definition": "['lb','ft']", "description": "", "templateType": "anything", "can_override": false}, "load": {"name": "load", "group": "Inputs", "definition": "qty(random(10..50#5), units[0\n ]+\"/\"+units[1])", "description": "", "templateType": "anything", "can_override": false}, "Q_W'": {"name": "Q_W'", "group": "soon", "definition": "CD Load\n", "description": "", "templateType": "anything", "can_override": false}, "Q_V": {"name": "Q_V", "group": "soon", "definition": "Q_W'-Q_Cy", "description": "", "templateType": "anything", "can_override": false}, "Q_Cy": {"name": "Q_Cy", "group": "soon", "definition": "Q_W - qty(F_AB[1], units[0])", "description": "", "templateType": "anything", "can_override": false}, "Q_AB": {"name": "Q_AB", "group": "soon", "definition": "qty(abs(F_AB), units[0])", "description": "", "templateType": "anything", "can_override": false}, "params": {"name": "params", "group": "Ungrouped variables", "definition": "[alpha: [definition: radians(alpha), visible: false],\nn: [definition: n, visible: false],\nshow: [definition: 0, visible: false],\n]", "description": "
n = 1..10
", "templateType": "anything", "can_override": false}, "F_AB": {"name": "F_AB", "group": "soon", "definition": "precround(scalar(Q_W)/2 * vector(1/tan(radians(alpha+180)), 1),4)", "description": "alpha is defined from negative x axis,
", "templateType": "anything", "can_override": false}, "BD": {"name": "BD", "group": "Inputs", "definition": "n/10 BC\n", "description": "n/10 is fraction of length BC
", "templateType": "anything", "can_override": false}, "Q_W": {"name": "Q_W", "group": "soon", "definition": "load * bc", "description": "W
", "templateType": "anything", "can_override": false}, "alpha": {"name": "alpha", "group": "Inputs", "definition": "random(-60..60#5 except [0, -5, 5])", "description": "", "templateType": "anything", "can_override": false}, "sum": {"name": "sum", "group": "soon", "definition": "precround(F_AB+F_C+F_W,3)", "description": "check
", "templateType": "anything", "can_override": false}, "Q_Cx": {"name": "Q_Cx", "group": "soon", "definition": "qty((F_AB[0]), units[0])", "description": "", "templateType": "anything", "can_override": false}, "F_W": {"name": "F_W", "group": "soon", "definition": "vector(-scalar(Q_W),0)", "description": "", "templateType": "anything", "can_override": false}, "CD": {"name": "CD", "group": "Inputs", "definition": "BC-BD", "description": "", "templateType": "anything", "can_override": false}, "Q_MD": {"name": "Q_MD", "group": "soon", "definition": "(CD Q_Cy - CD Q_W'/2)", "description": "Q
", "templateType": "anything", "can_override": false}, "F_C": {"name": "F_C", "group": "soon", "definition": "precround(-(F_AB+F_W),4)", "description": "", "templateType": "anything", "can_override": false}, "applet": {"name": "applet", "group": "Ungrouped variables", "definition": "geogebra_applet( 'pt6wrf9n', params)", "description": "", "templateType": "anything", "can_override": false}, "n": {"name": "n", "group": "Inputs", "definition": "random(2..8# 0.5)", "description": "Position of cut as ratio of BC
", "templateType": "anything", "can_override": false}, "fbd1": {"name": "fbd1", "group": "Ungrouped variables", "definition": "geogebra_applet('pt6wrf9n', params + [show: [definition: 1, visible: false]])", "description": "", "templateType": "anything", "can_override": false}, "fbd2": {"name": "fbd2", "group": "Ungrouped variables", "definition": "geogebra_applet('pt6wrf9n', params + \n[show: [definition: 2, visible: false],\n n: [definition: min(5,n), visible: false]\n])", "description": "just setting n=5 to make the diagram larger
", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "", "maxRuns": 100}, "ungrouped_variables": ["units", "applet", "params", "fbd1", "fbd2"], "variable_groups": [{"name": "soon", "variables": ["Q_W", "F_AB", "F_W", "F_C", "sum", "Q_AB", "Q_Cx", "Q_Cy", "Q_MD", "Q_W'", "Q_V"]}, {"name": "Inputs", "variables": ["BC", "alpha", "load", "n", "BD", "CD"]}], "functions": {"display": {"parameters": [["q", "quantity"]], "type": "string", "language": "jme", "definition": "string(siground(q,4))"}}, "preamble": {"js": "question.signals.on('adviceDisplayed',function() {\n try{\n var app = question.scope.variables.applet.app; \n app.setVisible(\"fbd\", true,false);\n app.setValue(\"fbd\", 1);\n }\n catch(err){} \n})\n", "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": "Shear force: | \n\n $P_D = $ [[0]] \n | \n
Normal force: | \n$V_D = $ [[1]] | \n
Bending moment: | \n$M_D =$ [[2]] | \n