// Numbas version: finer_feedback_settings {"name": "35. Internal Forces", "metadata": {"description": "

Homework set.  Find internal shear force, normal force, and bending moment at a designated point in a rigid body.

", "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": "Reactions for beam with uniformly distributed load", "extensions": ["jsxgraph", "quantities", "shear-and-bending-moment-diagrams"], "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\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)"}, {"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": [], "metadata": {"description": "

Find the reactions for a beam with a uniformly distributed load.

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

{loadDiagram}

\n

A $\\var{distance(L)}$ long beam is subjected uniformly distributed load, as shown. Assume the weight of the beam is negligible.

\n

w: {loading} W: {w}  $F_A$: {FA}  $F_B$ {FB}

", "advice": "
    \n
  1. To solve, replace the distributed load with an equivalent concentrated load.  The equivalent concentrated load acts at the centroid of the rectangle, and its magnitude is the \"area\" of the rectangle.  \\[ W_R = \\var{udl(loading)} \\times \\var{distance((D-C))} = \\var{force(w)} \\]
  2. \n
  3. Once replaced, draw a free body diagram; {fbd}
  4. \n
  5. Take moments at $A$ to find $B$ and vice-versa.  
  6. \n
  7. Check your work by applying $\\Sigma F_y = 0$.
  8. \n
", "rulesets": {}, "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true, "j": false}, "constants": [], "variables": {"x": {"name": "x", "group": "Ungrouped variables", "definition": "(C+D)/2", "description": "

midpoint of load

", "templateType": "anything", "can_override": false}, "loading": {"name": "loading", "group": "inputs", "definition": "random(1,2,3,4,5,6)* random(10, 20, 50, 100)", "description": "

magnitude of distributed loading [force/length]

", "templateType": "anything", "can_override": false}, "D": {"name": "D", "group": "inputs", "definition": "random(C..L)", "description": "

distributed load ends here

\n

D-C > 3 and B-A > L/2 and A<>C and B<>D

", "templateType": "anything", "can_override": false}, "C": {"name": "C", "group": "inputs", "definition": "random(0..L/2)", "description": "

distributed load starts here

", "templateType": "anything", "can_override": false}, "FA": {"name": "FA", "group": "Ungrouped variables", "definition": "W-FB", "description": "

reaction at A

", "templateType": "anything", "can_override": false}, "B": {"name": "B", "group": "inputs", "definition": "random(L/2..L)", "description": "

location of right hand support

", "templateType": "anything", "can_override": false}, "W": {"name": "W", "group": "Ungrouped variables", "definition": "loading * (D-C)", "description": "

Downward force

", "templateType": "anything", "can_override": false}, "L": {"name": "L", "group": "inputs", "definition": "random(8,10,12,14,16)", "description": "

length of beam

", "templateType": "anything", "can_override": false}, "debug": {"name": "debug", "group": "Ungrouped variables", "definition": "false", "description": "", "templateType": "anything", "can_override": false}, "FB": {"name": "FB", "group": "Ungrouped variables", "definition": "(x-A) * W / (B-A)\n", "description": "

reaction at B

", "templateType": "anything", "can_override": false}, "units": {"name": "units", "group": "inputs", "definition": "random(['lb','ft', 'lb/ft'],['N','m', 'N/m'])", "description": "", "templateType": "anything", "can_override": false}, "A": {"name": "A", "group": "inputs", "definition": "random(0..L/2)", "description": "

location of left hand support

", "templateType": "anything", "can_override": false}, "Force": {"name": "Force", "group": "Ungrouped variables", "definition": "(f)-> siground(qty(F,units[0]),4)", "description": "", "templateType": "anything", "can_override": false}, "distance": {"name": "distance", "group": "Ungrouped variables", "definition": "(d)-> siground(qty(d,units[1]),4)", "description": "", "templateType": "anything", "can_override": false}, "udl": {"name": "udl", "group": "Ungrouped variables", "definition": "(w)->siground(qty(w,units[2]),4)", "description": "", "templateType": "anything", "can_override": false}, "loadProperties": {"name": "loadProperties", "group": "diagrams", "definition": "[ beamLength: L, symbols: LoadSymbols, loads: loads, reactions: [], forces: [], moments: []]", "description": "", "templateType": "anything", "can_override": false}, "loadDiagram": {"name": "loadDiagram", "group": "diagrams", "definition": "vmloaddiagram(loadProperties)", "description": "", "templateType": "anything", "can_override": false}, "loadSymbols": {"name": "loadSymbols", "group": "diagrams", "definition": "[[type: \"pin\", x: A ,label: \"$R_A$\", visible: true], [type: \"roller\", x: b, label: \"$R_B$\", visible: true]]", "description": "", "templateType": "anything", "can_override": false}, "fbdproperties": {"name": "fbdproperties", "group": "diagrams", "definition": "[beamLength: L, reactions: FBDreactions, forces: FBDforces, moments: [], loads: fbdLoads, symbols: [[type: \"dot\", x: x ,label: string(distance(x)), visible: true]]]", "description": "", "templateType": "anything", "can_override": false}, "FBDforces": {"name": "FBDforces", "group": "diagrams", "definition": "[[x: x, value: W, label: \"$W_R$\", visible: true]]", "description": "", "templateType": "anything", "can_override": false}, "FBDreactions": {"name": "FBDreactions", "group": "diagrams", "definition": "[[x: A, value: FA, label: \"$A$\", visible: true],[x: B, value: FB, label: \"$B$\", visible: true]]", "description": "", "templateType": "anything", "can_override": false}, "fbd": {"name": "fbd", "group": "diagrams", "definition": "vmloaddiagram(fbdproperties)", "description": "", "templateType": "anything", "can_override": false}, "fbdLoads": {"name": "fbdLoads", "group": "diagrams", "definition": "[[[x: C, value: 1, label:\"\", visible: false],[x: D, value: 1, label: \"\", visible: false]]]", "description": "", "templateType": "anything", "can_override": false}, "loads": {"name": "loads", "group": "diagrams", "definition": "[[[x: C, value: 1, label: string(udl(loading)), visible: true],[x: D, value: 1, label: \"\", visible: true]]]", "description": "", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "D-C > 3 and B-A > L/2 and A<>C and B<>D", "maxRuns": 100}, "ungrouped_variables": ["W", "FB", "x", "FA", "debug", "Force", "distance", "udl"], "variable_groups": [{"name": "inputs", "variables": ["A", "B", "C", "D", "loading", "units", "L"]}, {"name": "diagrams", "variables": ["loadProperties", "loads", "loadDiagram", "loadSymbols", "fbdproperties", "FBDforces", "FBDreactions", "fbd", "fbdLoads"]}, {"name": "Unnamed group", "variables": []}], "functions": {}, "preamble": {"js": "", "css": ".jsxgraph-board {width: 200px; height: 100px;}"}, "parts": [{"type": "gapfill", "useCustomName": true, "customName": "Reactions", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Determine the reactions at $A$ and $B$.

\n

$A$ = [[0]]  $B$ = [[1]] 

", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "A", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "force(FA)", "right": "0.1", "close": "1.0", "C1": "80", "C2": "80", "C3": "60"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "B", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "force(FB)", "right": "0.1", "close": "1.0", "C1": "80", "C2": "80", "C3": "60"}}], "sortAnswers": false}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}, {"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\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)"}, {"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": [], "metadata": {"description": "

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.  

\n

Determine the internal forces at point $D$ which is located {BD} to the right of point $B$.

\n

{geogebra_applet( 'pt6wrf9n', params)}

", "advice": "

Find the reactions B and C

\n

Draw a Free body diagram of beam $BC$.  

\n

{fbd1}

\n

Note that member $AB$ is a two-force member, so force $AB$ acts along its axis.

\n

Replace 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

\n

Let 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

\n

Take an imaginary cut through member BC at point D and draw a free body diagram of the right (or left) portion.

\n

{fbd2} 

\n

The 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.  

\n

Note 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')}$

\n

Solve 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": {}, "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true, "j": false}, "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(20..60#5) random(-1,1)", "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": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Shear force:\n

$V_D  = $ [[1]]

\n
Normal force:\n

$P_D = $ [[0]]

\n
Bending moment: $M_D =$ [[2]]
\n

\n

", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "$P_D$", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "-Q_Cx", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "$V_D$", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "Q_V", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "$M_D$", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "Q_MD", "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": "Internal force: Overhanging beam", "extensions": ["geogebra", "jsxgraph", "quantities", "shear-and-bending-moment-diagrams"], "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\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)"}, {"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": ["bending moment", "distributed load", "internal forces", "Mechanics", "mechanics", "shear", "Statics", "statics"], "metadata": {"description": "

Calculate reactions and shear and bending moment at a point for an overhanging beam with a constant or uniformly varying distributed load.

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

{loadDiagram}

\n

The $\\var{distance(L)}$ beam shown supports a load that varies uniformly from $\\var{load(Wa)}$ at the left end to $\\var{load(Wb)}$ at the right end. Point $C$ is located at $x =\\var{distance(C)}$.

\n", "advice": "

1.  Replace the distributed load with an equivalent concentrated load and draw a free-body diagram of the entire beam.

\n

{fbd1}

\n

Recall that the equivalent force of a distributed load is the 'area' and it acts at the centroid of the shaded area above.

\n

\\[ W = \\var{force(W)},\\qquad      \\bar{x}=\\var{distance(xbarW)}\\]

\n

2.  Apply equilibrium equations to find the reactions at $A$ and $B$.

\n

\\[\\begin{align} \\Sigma M_A &= 0 &  \\Sigma F_y &=0 \\\\
R_B\\cdot \\var{distance(B)} &=  W \\cdot \\bar{x} &  R_A + R_B &= \\var{W}\\\\
R_B &= \\var{force(R_B)} \\uparrow & R_A &= \\var{force(abs(R_A))}  \\var{if(R_A>0,latex('\\\\uparrow'),latex('\\\\downarrow'))}\\end{align}\\]

\n

3. Take an imaginary cut at point $C$, and draw a FBD of the portion of the beam  to the left of $C$ and use it to find the shear and bending moment at the cut.

\n

{fbd2}

\n

a.  Use similar triangles to find $w_C$,  the distributed load at point $C$.

\n

Knowing $w_A = \\var{load(wA)} $, $w_B = \\var{load(wB)} $.

\n

\\[ \\begin{align}
\\dfrac{w_C -w_A}{\\var{distance(C)}} &= \\dfrac{w_B-w_A}{\\var{distance(L)}}\\\\
 w_C &= w_A + \\left(\\var{siground(c/L,4)} \\right)\\left( w_B - w_A \\right) \\\\
&= \\var{load(WC)}
\\end{align}\\]

\n

b.  Find the equivalent force due to the distributed load.

\n

 \\[ \\begin{align}
  W' &= (\\var{distance(C)}) \\left(\\dfrac{W_A + W_C}{2}\\right) \\\\
      & = \\var{force(W')}
\\end{align} \\]

\n

c.  Locate the centroid of the equivalent concentrated load.

\n

\\[ \\bar{x} = \\var{force(xbarW')}\\]

\n

d. Apply equilibrium equations to solve for the shear and moment at $C$.

\n

\\[\\begin{align} \\Sigma F_y &=0\\\\
V_C &= \\var{force(FV)} \\end{align}\\]

\n
\n

\\[\\begin{align}
\\Sigma M_C &= 0 \\\\
M_C  & = R_A \\cdot \\var{distance(C)} - W'  \\cdot (\\var{distance(C)} -\\bar{x})  \\\\
&= \\left( \\var{force(R_A)}\\right)  \\left(\\var{distance(C)}\\right) - \\left(\\var{force(W')}\\right) \\left(\\var{distance(d)}\\right)   \\\\
M_C &= \\var{moment(M_C)}  \\end{align}\\]

\n

\n
\n
\n

\\[\\begin{align}
\\Sigma M_C &= 0 \\\\
M_C  & = R_A \\cdot \\var{distance(C)} - W'  \\cdot (\\var{distance(C)} -\\bar{x})  +R_B \\cdot d_\\perp) \\\\
&= \\left( \\var{force(R_A)}\\right)  \\left(\\var{distance(C)}\\right) - \\left(\\var{force(W')}\\right) \\left(\\var{distance(d)}\\right)+\\left(\\var{force(R_B)}\\right) \\left(\\var{distance(C-B)}\\right)  \\\\
M_C &= \\var{moment(M_C)}  \\end{align}\\]

\n
\n

", "rulesets": {}, "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true, "j": false}, "constants": [], "variables": {"L": {"name": "L", "group": "Quantities", "definition": "random(12..20#2)", "description": "

overall length of the beam.

", "templateType": "anything", "can_override": false}, "units": {"name": "units", "group": "functions", "definition": "random(['N','m', 'N*m', 'N/m'],['lb','ft', 'ft*lb', 'lb/ft'])", "description": "", "templateType": "anything", "can_override": false}, "debug": {"name": "debug", "group": "Ungrouped variables", "definition": "false", "description": "", "templateType": "anything", "can_override": false}, "FV": {"name": "FV", "group": "Unnamed group", "definition": "siground(R_A + if(Bshear force at C, Signed

", "templateType": "anything", "can_override": false}, "M_C": {"name": "M_C", "group": "Unnamed group", "definition": "siground(R_A * C - W' *(C - xbarW') + if(Bmoment at D, signed

\n

−\ud835\udc34\u2113−\ud835\udc4a′\ud835\udc51⊥−\ud835\udc36\ud835\udc512

", "templateType": "anything", "can_override": false}, "C": {"name": "C", "group": "Quantities", "definition": "random(2..L#2 except[L,B])", "description": "

position of cut

", "templateType": "anything", "can_override": false}, "size": {"name": "size", "group": "Quantities", "definition": "random(50,100,200)", "description": "

Random load value used to make actual loads Wa and Wb.

", "templateType": "anything", "can_override": false}, "WC": {"name": "WC", "group": "Quantities", "definition": "WA + (WB-WA) C / L ", "description": "

distributed load value at point C

", "templateType": "anything", "can_override": false}, "WB": {"name": "WB", "group": "Quantities", "definition": "size random(0..2#0.5)", "description": "

distributed load value at point A, right end.

", "templateType": "anything", "can_override": false}, "WA": {"name": "WA", "group": "Quantities", "definition": "size random(0..2#0.5)", "description": "

distributed load value at point A, left end

", "templateType": "anything", "can_override": false}, "d": {"name": "d", "group": "Unnamed group", "definition": "c-xbarw'", "description": "

distance from cut to equivalent load

", "templateType": "anything", "can_override": false}, "force": {"name": "force", "group": "functions", "definition": "(f)-> siground(qty(f, units[0]),4)", "description": "", "templateType": "anything", "can_override": false}, "distance": {"name": "distance", "group": "functions", "definition": "(d)->siground(qty(d,units[1]),4)", "description": "", "templateType": "anything", "can_override": false}, "load": {"name": "load", "group": "functions", "definition": "(l)->siground(qty(l,units[3]),4)", "description": "", "templateType": "anything", "can_override": false}, "properties": {"name": "properties", "group": "jsxgraph", "definition": "[beamLength: L, loads: [w1], forces: [], moments: [], reactions: [hide(RA),hide(RB)], symbols: symbols]", "description": "", "templateType": "anything", "can_override": false}, "W1": {"name": "W1", "group": "jsxgraph", "definition": "[[x: 0, value: wA, label: WA+if(WA<>WB, \" to \" + string(load(WB)) , ''), visible: true],[x: L, value: WB, label: \"D\", visible: true],]", "description": "", "templateType": "anything", "can_override": false}, "LoadDiagram": {"name": "LoadDiagram", "group": "jsxgraph", "definition": "vmloaddiagram(properties)", "description": "", "templateType": "anything", "can_override": false}, "symbols": {"name": "symbols", "group": "jsxgraph", "definition": "[[x: C, type: \"dot\", visible: true, label: \"$C$\"],[x: B, type: \"roller\", visible: true , label: \"$B$\"], [x: 0, type: 'pin', visible: true, label: \"$A$\"]]", "description": "", "templateType": "anything", "can_override": false}, "moment": {"name": "moment", "group": "functions", "definition": "(m)-> siground(qty(m, units[2]),4)", "description": "", "templateType": "anything", "can_override": false}, "B": {"name": "B", "group": "Quantities", "definition": "round(random(L/2..L))", "description": "", "templateType": "anything", "can_override": false}, "xbar": {"name": "xbar", "group": "functions", "definition": "(w) -> let (xa, w[0][\"x\"], xb, w[1][\"x\"], ya, w[0][\"value\"], yb, w[1][\"value\"] , if(xa+xb=0, 0, xa+(xb - xa)*(ya + 2 yb)/3/(ya + yb)))", "description": "", "templateType": "anything", "can_override": false}, "xbarW": {"name": "xbarW", "group": "jsxgraph", "definition": "xbar(W1)", "description": "", "templateType": "anything", "can_override": false}, "area": {"name": "area", "group": "functions", "definition": "w -> let (xa, w[0][\"x\"], xb, w[1][\"x\"], ya, w[0][\"value\"], yb, w[1][\"value\"] ,(xb-xa)(ya+yb)/2)", "description": "", "templateType": "anything", "can_override": false}, "W": {"name": "W", "group": "jsxgraph", "definition": "area(W1)", "description": "

equivalent force of entire load

", "templateType": "anything", "can_override": false}, "W1'": {"name": "W1'", "group": "Unnamed group", "definition": "[[x: 0, value: wA, label: '', visible: true],[x: C, value: WC, label: \"C\", visible: true],]", "description": "", "templateType": "anything", "can_override": false}, "xbarW'": {"name": "xbarW'", "group": "Unnamed group", "definition": "xbar(w1')", "description": "", "templateType": "anything", "can_override": false}, "W'": {"name": "W'", "group": "Unnamed group", "definition": "area(W1')", "description": "

equivalent force of part load

", "templateType": "anything", "can_override": false}, "EqW": {"name": "EqW", "group": "diagrams", "definition": "[x: xbar(w1), value: area(W1), label: \"$W$\", visible: true]", "description": "", "templateType": "anything", "can_override": false}, "EqW'": {"name": "EqW'", "group": "Unnamed group", "definition": "[x: xbarW', value: W', label: \"$W'$\", visible: true]", "description": "", "templateType": "anything", "can_override": false}, "R_A": {"name": "R_A", "group": "Quantities", "definition": "let(equivalent_loads, eqw,(sum(map(f->cross( vector(B-f[\"x\"],0,0),vector(0,-f[\"value\"],0))[2],forces+equivalent_loads))\n- sum(map(m->m['value'], moments)))/(A-B))\n", "description": "

Reaction at A

", "templateType": "anything", "can_override": false}, "check": {"name": "check", "group": "Quantities", "definition": "R_A + R_B = EqW[\"value\"]", "description": "", "templateType": "anything", "can_override": false}, "shearDiagram": {"name": "shearDiagram", "group": "jsxgraph", "definition": "vmsheardiagram(properties,debug)", "description": "", "templateType": "anything", "can_override": false}, "momentDiagram": {"name": "momentDiagram", "group": "jsxgraph", "definition": "vmmomentdiagram(properties,debug)", "description": "", "templateType": "anything", "can_override": false}, "reactions": {"name": "reactions", "group": "jsxgraph", "definition": "[[x: 0, value: R_A, label: \"$R_A$\", visible: false],[x: B, value: R_B, label: \"$R_B$\", visible: false]]", "description": "", "templateType": "anything", "can_override": false}, "forces": {"name": "forces", "group": "Ungrouped variables", "definition": "[]", "description": "", "templateType": "anything", "can_override": false}, "moments": {"name": "moments", "group": "Ungrouped variables", "definition": "[]", "description": "", "templateType": "anything", "can_override": false}, "properties_fbd1": {"name": "properties_fbd1", "group": "diagrams", "definition": "[beamLength: L, loads: [[hide(relabel(w1[0], \"\")),w1[1]]], forces: [eqw], reactions: [[x: 0, value: abs(R_A), label: \"$R_A$\", visible: true],RB], moments: [], symbols: [[x: C, type: \"dot\", visible: true, label: \"$C$\"],[x: xbarw, type: \"dot\", label: \"$\\\\bar{x}$\", visible: true]]]", "description": "", "templateType": "anything", "can_override": false}, "fbd1": {"name": "fbd1", "group": "diagrams", "definition": "vmloaddiagram(properties_fbd1)", "description": "", "templateType": "anything", "can_override": false}, "relabel": {"name": "relabel", "group": "functions", "definition": "(dict, label) -> merge(dict, [label: label])", "description": "", "templateType": "anything", "can_override": false}, "hide": {"name": "hide", "group": "functions", "definition": "(dict) -> merge(dict, [visible: false])", "description": "", "templateType": "anything", "can_override": false}, "A": {"name": "A", "group": "Quantities", "definition": "0", "description": "", "templateType": "anything", "can_override": false}, "RA": {"name": "RA", "group": "jsxgraph", "definition": "[x: 0, value: R_A, label: \"$R_A$\", visible: true]", "description": "", "templateType": "anything", "can_override": false}, "RB": {"name": "RB", "group": "jsxgraph", "definition": "[x: B, value: R_B, label: \"$R_B$\", visible: true]", "description": "", "templateType": "anything", "can_override": false}, "properties_fbd2": {"name": "properties_fbd2", "group": "Unnamed group", "definition": "[beamLength: C, loads: [[hide(w1'[0]),w1'[1]]], forces: [eqw'], reactions: [relabel(RA, string(force(abs(RA[\"value\"])))),V, relabel(RB, string(force(abs(RB[\"value\"]))))], moments: [M], symbols: [[x: xbarw', type: \"dot\", label: \"$\\\\bar{x}$\", visible: true], [x: B, type: \"dot\", label: \"$B$\", visible: true]]]", "description": "", "templateType": "anything", "can_override": false}, "fbd2": {"name": "fbd2", "group": "Unnamed group", "definition": "vmloaddiagram(properties_fbd2)", "description": "", "templateType": "anything", "can_override": false}, "V": {"name": "V", "group": "Unnamed group", "definition": "[x: C, value: -abs(fv), label: \"$V_C$\", visible: true]", "description": "

shear force points down on fbd

", "templateType": "anything", "can_override": false}, "M": {"name": "M", "group": "Unnamed group", "definition": "[x: C, value: 1, label: \"$M_C$\", visible: true]", "description": "", "templateType": "anything", "can_override": false}, "R_B": {"name": "R_B", "group": "Quantities", "definition": "-map(f->cross( vector(A-f[\"x\"],0,0),vector(0,-f[\"value\"],0))[2],forces+eqw)[0]/(A-B)\n", "description": "", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "WA<>WB //always trapezoidal", "maxRuns": 100}, "ungrouped_variables": ["debug", "forces", "moments"], "variable_groups": [{"name": "Quantities", "variables": ["L", "A", "B", "C", "size", "WA", "WB", "WC", "R_A", "R_B", "check"]}, {"name": "vectors", "variables": []}, {"name": "jsxgraph", "variables": ["properties", "LoadDiagram", "shearDiagram", "momentDiagram", "W1", "symbols", "xbarW", "reactions", "W", "RA", "RB"]}, {"name": "functions", "variables": ["units", "force", "distance", "load", "moment", "area", "xbar", "relabel", "hide"]}, {"name": "diagrams", "variables": ["EqW", "properties_fbd1", "fbd1"]}, {"name": "Unnamed group", "variables": ["properties_fbd2", "fbd2", "W1'", "W'", "xbarW'", "EqW'", "FV", "M_C", "d", "V", "M"]}], "functions": {"display": {"parameters": [["q", "quantity"]], "type": "string", "language": "jme", "definition": "string(siground(q,4))"}, "applet": {"parameters": [["app_width", "number"], ["app_height", "number"], ["show_fbd", "boolean"]], "type": "ggbapplet", "language": "javascript", "definition": "// Create the worksheet. \n// This function returns an object with a container `element` and a `promise` resolving to a GeoGebra applet.\nvar params = {\n material_id: 'susdzdmr',\n width: app_width,\n height: app_height\n};\n//geogebra_applet('susdzdmr') old ggb file\n\nvar result = Numbas.extensions.geogebra.createGeogebraApplet(params);\n\n// Once the applet has loaded, run some commands to manipulate the worksheet.\nresult.promise.then(function(d) {\n var app = d.app;\n question.applet = d;\n app.setGridVisible(false);\n \n function setGGBPoint(name) {\n // moves point in GGB to location of Numbas Vector Variable\n var pt = question.scope.evaluate(name).value\n app.setFixed(name,false,false);\n app.setCoords(name, pt[0], pt[1]);\n app.setFixed(name,true,true);\n }\n\n function setGGBNumber(name) {\n // Sets number in GGB to a Numbas Variable\n var n = question.scope.evaluate(name).value;\n app.setValue(name,n);\n }\n \n setGGBPoint(\"C\");\n setGGBPoint(\"D\");\n app.setValue('fbd',show_fbd);\n app.setAxesVisible(false,false);\n app.enableShiftDragZoom(false);\n setGGBNumber(\"w_A\");\n setGGBNumber(\"w_B\");\n \n \n \n \n});\n\n// This function returns the result of `createGeogebraApplet` as an object \n// with the JME data type 'ggbapplet', which can be substituted into the question's content.\nreturn new Numbas.jme.types.ggbapplet(result);"}, "showfbds": {"parameters": [], "type": "ggbapplet", "language": "javascript", "definition": "// Create the worksheet. \n// This function returns an object with a container `element` and a `promise` resolving to a GeoGebra applet.\nvar params = {\n material_id: 'susdzdmr',\n width: 500,\n height: 500\n};\n//geogebra_applet('susdzdmr') old ggb file\n\nvar result = Numbas.extensions.geogebra.createGeogebraApplet(params);\n\n// Once the applet has loaded, run some commands to manipulate the worksheet.\nresult.promise.then(function(d) {\n var app = d.app;\n question.applet = d;\n app.setGridVisible(false);\n \n function setGGBPoint(name) {\n // moves point in GGB to location of Numbas Vector Variable\n var pt = question.scope.evaluate(name).value\n app.setFixed(name,false,false);\n app.setCoords(name, pt[0], pt[1]);\n app.setFixed(name,true,true);\n }\n\n function setGGBNumber(name) {\n // Sets number in GGB to a Numbas Variable\n var n = question.scope.evaluate(name).value;\n app.setValue(name,n);\n }\n \n setGGBPoint(\"C\");\n setGGBPoint(\"D\");\n app.setValue('fbd',true);\n app.setAxesVisible(false,false);\n app.enableShiftDragZoom(false);\n setGGBNumber(\"w_A\");\n setGGBNumber(\"w_B\");\n \n \n \n \n});\n\n// This function returns the result of `createGeogebraApplet` as an object \n// with the JME data type 'ggbapplet', which can be substituted into the question's content.\nreturn new Numbas.jme.types.ggbapplet(result);"}, "trapezoid": {"parameters": [["a", "number"], ["b", "number"], ["w", "number"]], "type": "vector", "language": "jme", "definition": "[(a+b)/2 * w, (w/3)*(a + 2b)/(a+b)] // a = left height, b = right height, w = width.... returns area and xbar"}}, "preamble": {"js": "", "css": ""}, "parts": [{"type": "gapfill", "useCustomName": true, "customName": "Reactions", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Determine the reactions at pin $A$ and roller $B$.  Let positive values indicate upward forces.

\n

$A$ = [[0]]    $\\var{force(R_A)}$

\n

$B$ = [[1]]   $\\var{force(R_B)}$

", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "$R_A$", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "force(R_A)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "$R_B$", "marks": "10", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "Force(R_B)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": true, "customName": "Internal Load", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "

Determine the internal shear and bending moment at a section passing through point $C$. Use the standard convention for the meaning of positive shears and bending moments. 

\n

$V_C$  = [[0]]    $\\var{force(FV)}$

\n

$M_C$ = [[1]]    $\\var{moment(M_C)}$

", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "$V_C$", "marks": "15", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "force(FV)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "$M_C$", "marks": "15", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "moment(M_C)", "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, "navigatemode": "sequence", "onleave": {"action": "none", "message": ""}, "preventleave": true, "typeendtoleave": false, "startpassword": "", "autoSubmit": true, "allowAttemptDownload": false, "downloadEncryptionKey": "", "showresultspage": "oncompletion"}, "timing": {"allowPause": true, "timeout": {"action": "none", "message": ""}, "timedwarning": {"action": "none", "message": ""}}, "feedback": {"enterreviewmodeimmediately": true, "showactualmarkwhen": "always", "showtotalmarkwhen": "always", "showanswerstatewhen": "always", "showpartfeedbackmessageswhen": "always", "showexpectedanswerswhen": "inreview", "showadvicewhen": "inreview", "allowrevealanswer": true, "intro": "", "end_message": "", "results_options": {"printquestions": true, "printadvice": true}, "feedbackmessages": [], "reviewshowexpectedanswer": true, "showanswerstate": true, "reviewshowfeedback": true, "showactualmark": true, "showtotalmark": true, "reviewshowscore": true, "reviewshowadvice": true}, "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", "jsxgraph", "quantities", "shear-and-bending-moment-diagrams"], "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\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)"}, {"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": []}