randRangeNonZero( -5, 5 ) randRange( -5, 5 )
randRangeNonZero( -5, 5 ) randRangeNonZero( -5, 5 )
(Y - YINT_1) / X (Y - YINT_2) / X toFraction( SLOPE_1, 0.001 ) toFraction( SLOPE_2, 0.001 )
SLOPE_1 === 1 ? "" : ( SLOPE_1 === -1 ? "-" : fraction( SLOPE_FRAC_1[0], SLOPE_FRAC_1[1], true, true ) ) SLOPE_2 === 1 ? "" : ( SLOPE_2 === -1 ? "-" : fraction( SLOPE_FRAC_2[0], SLOPE_FRAC_2[1], true, true ) ) randRangeNonZero( -3, 3 ) randRangeNonZero( -3, 3 ) SLOPE_FRAC_1[0] * -MULT_1 SLOPE_FRAC_2[0] * -MULT_2 SLOPE_FRAC_1[1] * MULT_1 SLOPE_FRAC_2[1] * MULT_2 SLOPE_FRAC_1[1] * YINT_1 * MULT_1 SLOPE_FRAC_2[1] * YINT_2 * MULT_2 randFromArray([ true, false ]) randFromArray([ true, false ]) randFromArray([ "<", ">", "≤", "≥" ]) randFromArray([ "<", ">", "≤", "≥" ]) B_1 < 0 ? { "<": ">", ">": "<", "≤": "≥", "≥": "≤" }[ COMP_1 ] : COMP_1 B_2 < 0 ? { "<": ">", ">": "<", "≤": "≥", "≥": "≤" }[ COMP_2 ] : COMP_2 COMP_1 == "<" || COMP_1 == "≤" COMP_2 == "<" || COMP_2 == "≤" COMP_1 == "≥" || COMP_1 == "≤" COMP_2 == "≥" || COMP_2 == "≤"
[ randRangeExclude( -9, 9, [ -3, -2, -1, 0 ] ), randRangeExclude( -9, 9, [ -1, -2 ] ) ] [ randRangeExclude( -9, 9, [ -3, -2, -1, 0 ] ), randRangeExclude( -9, 9, [ -1, -2 ] ) ] (((COMP_1 == "<") && ( POINT_1[1] < SLOPE_1 * POINT_1[0] + YINT_1 )) || ((COMP_1 == "≤") && ( POINT_1[1] <= SLOPE_1 * POINT_1[0] + YINT_1 )) || ((COMP_1 == ">") && ( POINT_1[1] > SLOPE_1 * POINT_1[0] + YINT_1 )) || ((COMP_1 == "≥") && ( POINT_1[1] >= SLOPE_1 * POINT_1[0] + YINT_1 ))) && (((COMP_2 == "<") && ( POINT_1[1] < SLOPE_2 * POINT_1[0] + YINT_2 )) || ((COMP_2 == "≤") && ( POINT_1[1] <= SLOPE_2 * POINT_1[0] + YINT_2 )) || ((COMP_2 == ">") && ( POINT_1[1] > SLOPE_2 * POINT_1[0] + YINT_2 )) || ((COMP_2 == "≥") && ( POINT_1[1] >= SLOPE_2 * POINT_1[0] + YINT_2 ))) (((COMP_1 == "<") && ( POINT_2[1] < SLOPE_1 * POINT_2[0] + YINT_1 )) || ((COMP_1 == "≤") && ( POINT_2[1] <= SLOPE_1 * POINT_2[0] + YINT_1 )) || ((COMP_1 == ">") && ( POINT_2[1] > SLOPE_1 * POINT_2[0] + YINT_1 )) || ((COMP_1 == "≥") && ( POINT_2[1] >= SLOPE_1 * POINT_2[0] + YINT_1 ))) && (((COMP_2 == "<") && ( POINT_2[1] < SLOPE_2 * POINT_2[0] + YINT_2 )) || ((COMP_2 == "≤") && ( POINT_2[1] <= SLOPE_2 * POINT_2[0] + YINT_2 )) || ((COMP_2 == ">") && ( POINT_2[1] > SLOPE_2 * POINT_2[0] + YINT_2 )) || ((COMP_2 == "≥") && ( POINT_2[1] >= SLOPE_2 * POINT_2[0] + YINT_2 )))

Graph the following system of inequalities and determine if the points (POINT_1[0], POINT_1[1]) or (POINT_2[0], POINT_2[1]) are solutions:

expr([ "+", [ "*", A_1, "x" ], [ "*", B_1, "y" ] ]) STD_FORM_COMP_1 C_1

y COMP_1 PRETTY_SLOPE_1 x + YINT_1

expr([ "+", [ "*", A_2, "x" ], [ "*", B_2, "y" ] ]) STD_FORM_COMP_2 C_2

y COMP_2 PRETTY_SLOPE_2 x + YINT_2

Inequality 1:
Inequality 2:
graphInit({ range: 11, scale: 20, axisArrows: "<->", tickStep: 1, labelStep: 1, gridOpacity: 0.05, axisOpacity: 0.2, tickOpacity: 0.4, labelOpacity: 0.5 }); label( [ 0, -11 ], "y", "below" ); label( [ 11, 0 ], "x", "right" ); addMouseLayer(); graph.pointA = addMovablePoint({ coord: [ -5, 5 ], snapX: 0.5, snapY: 0.5, normalStyle: { stroke: KhanUtil.BLUE, fill: KhanUtil.BLUE } }); graph.pointB = addMovablePoint({ coord: [ 5, 5 ], snapX: 0.5, snapY: 0.5, normalStyle: { stroke: KhanUtil.BLUE, fill: KhanUtil.BLUE } }); graph.pointC = addMovablePoint({ coord: [ -5, -5 ], snapX: 0.5, snapY: 0.5, normalStyle: { stroke: KhanUtil.BLUE, fill: KhanUtil.BLUE } }); graph.pointD = addMovablePoint({ coord: [ 5, -5 ], snapX: 0.5, snapY: 0.5, normalStyle: { stroke: KhanUtil.BLUE, fill: KhanUtil.BLUE } }); graph.set = raphael.set(); graph.update = function() { graph.set.remove(); if ( abs( graph.pointB.coord[0] - graph.pointA.coord[0] ) > 0.001 ) { var slope = ( graph.pointB.coord[1] - graph.pointA.coord[1] ) / ( graph.pointB.coord[0] - graph.pointA.coord[0] ); var yint = slope * ( 0 - graph.pointA.coord[0] ) + graph.pointA.coord[1]; var shadeEdge = ( ( graph.pointA.coord[0] < graph.pointB.coord[0] ) ? graph.shadetop1 : !graph.shadetop1 ) ? 11 : -11; style({ stroke: BLUE, strokeWidth: 2, strokeDasharray: graph.dasharray1 }, function() { graph.set.push( line( [ -11, -11 * slope + yint ], [ 11, 11 * slope + yint ] ) ); }); style({ fill: BLUE, stroke: null, opacity: KhanUtil.FILL_OPACITY }, function() { graph.set.push( path([ [ 11, shadeEdge ], [ 11, 11 * slope + yint ], [ -11, -11 * slope + yint ], [ -11, shadeEdge ] ]) ); }); } else { // vertical line var x = graph.pointA.coord[0]; var shadeEdge = ( ( graph.pointB.coord[1] < graph.pointA.coord[1] ) ? graph.shadetop1 : !graph.shadetop1 ) ? 11 : -11; style({ stroke: BLUE, strokeWidth: 2, strokeDasharray: graph.dasharray1 }, function() { graph.set.push( line( [ x, -11 ], [ x, 11 ] ) ); }); style({ fill: BLUE, stroke: null, opacity: KhanUtil.FILL_OPACITY }, function() { graph.set.push( path([ [ x, -11 ], [ x, 11 ], [ shadeEdge, 11 ], [ shadeEdge, -11 ] ]) ); }); } if ( abs( graph.pointD.coord[0] - graph.pointC.coord[0] ) > 0.001 ) { var slope = ( graph.pointD.coord[1] - graph.pointC.coord[1] ) / ( graph.pointD.coord[0] - graph.pointC.coord[0] ); var yint = slope * ( 0 - graph.pointC.coord[0] ) + graph.pointC.coord[1]; var shadeEdge = ( ( graph.pointC.coord[0] < graph.pointD.coord[0] ) ? graph.shadetop2 : !graph.shadetop2 ) ? 11 : -11; style({ stroke: GREEN, strokeWidth: 2, strokeDasharray: graph.dasharray2 }, function() { graph.set.push( line( [ -11, -11 * slope + yint ], [ 11, 11 * slope + yint ] ) ); }); style({ fill: GREEN, stroke: null, opacity: KhanUtil.FILL_OPACITY }, function() { graph.set.push( path([ [ 11, shadeEdge ], [ 11, 11 * slope + yint ], [ -11, -11 * slope + yint ], [ -11, shadeEdge ] ]) ); }); } else { // vertical line var x = graph.pointC.coord[0]; var shadeEdge = ( ( graph.pointD.coord[1] < graph.pointC.coord[1] ) ? graph.shadetop2 : !graph.shadetop2 ) ? 11 : -11; style({ stroke: GREEN, strokeWidth: 2, strokeDasharray: graph.dasharray2 }, function() { graph.set.push( line( [ x, -11 ], [ x, 11 ] ) ); }); style({ fill: GREEN, stroke: null, opacity: KhanUtil.FILL_OPACITY }, function() { graph.set.push( path([ [ x, -11 ], [ x, 11 ], [ shadeEdge, 11 ], [ shadeEdge, -11 ] ]) ); }); } graph.set.toBack(); }; // A and B can't be in the same place graph.pointA.onMove = function( x, y ) { if ( x != graph.pointB.coord[0] || y != graph.pointB.coord[1] ) { graph.pointA.setCoord([ x, y ]); graph.update(); return true; } else { return false; } } graph.pointB.onMove = function( x, y ) { if ( x != graph.pointA.coord[0] || y != graph.pointA.coord[1] ) { graph.pointB.setCoord([ x, y, ]); graph.update(); return true; } else { return false; } } // C and D can't be in the same place graph.pointC.onMove = function( x, y ) { if ( x != graph.pointD.coord[0] || y != graph.pointD.coord[1] ) { graph.pointC.setCoord([ x, y ]); graph.update(); return true; } else { return false; } } graph.pointD.onMove = function( x, y ) { if ( x != graph.pointC.coord[0] || y != graph.pointC.coord[1] ) { graph.pointD.setCoord([ x, y, ]); graph.update(); return true; } else { return false; } } graph.dasharray1 = ""; graph.dasharray2 = ""; graph.shadetop1 = true; graph.shadetop2 = false; graph.update(); graph.pointA.toFront(); graph.pointB.toFront(); graph.pointC.toFront(); graph.pointD.toFront();
Drag the points to move both lines into the correct positions.
[ graph.pointA.coord, graph.pointB.coord, graph.pointA.coord[0] > graph.pointB.coord[0] ? graph.shadetop1 : !graph.shadetop1, graph.dasharray1 === "- " ? false : true, graph.pointC.coord, graph.pointD.coord, graph.pointC.coord[0] > graph.pointD.coord[0] ? graph.shadetop2 : !graph.shadetop2, graph.dasharray2 === "- " ? false : true ]
var slope1 = ( guess[1][1] - guess[0][1] ) / ( guess[1][0] - guess[0][0] ); var yint1 = slope1 * ( 0 - guess[0][0] ) + guess[0][1]; var slope2 = ( guess[5][1] - guess[4][1] ) / ( guess[5][0] - guess[4][0] ); var yint2 = slope2 * ( 0 - guess[4][0] ) + guess[4][1]; return abs( SLOPE_1 - slope1 ) < 0.001 && abs( YINT_1 - yint1 ) < 0.001 && guess[2] === LESS_THAN_1 && guess[3] === INCLUSIVE_1 && abs( SLOPE_2 - slope2 ) < 0.001 && abs( YINT_2 - yint2 ) < 0.001 && guess[6] === LESS_THAN_2 && guess[7] === INCLUSIVE_2;
graph.pointA.setCoord( guess[0] ); graph.pointB.setCoord( guess[1] ); graph.pointC.setCoord( guess[4] ); graph.pointD.setCoord( guess[5] ); graph.shadetop1 = graph.pointA.coord[0] > graph.pointB.coord[0] ? guess[2] : !guess[2]; graph.shadetop2 = graph.pointC.coord[0] > graph.pointD.coord[0] ? guess[6] : !guess[6]; if ( guess[3] ) { graph.dasharray1 = ""; jQuery( "input[name=dashradio1][value=solid]" ).attr( "checked", true ); } else { graph.dasharray1 = "- "; jQuery( "input[name=dashradio1][value=dashed]" ).attr( "checked", true ); } if ( guess[7] ) { graph.dasharray2 = ""; jQuery( "input[name=dashradio2][value=solid]" ).attr( "checked", true ); } else { graph.dasharray2 = "- "; jQuery( "input[name=dashradio2][value=dashed]" ).attr( "checked", true ); } graph.update();


graph the inequalities
make sure the correct sides are shaded
make sure each line is correctly shown as solid or dashed

Convert the first inequality, expr([ "+", [ "*", A_1, "x" ], [ "*", B_1, "y" ] ]) STD_FORM_COMP_1 C_1, to slope-intercept form by solving for y.

A_1 < 0 ? "Add" : "Subtract" abs( A_1 )x A_1 < 0 ? "to" : "from" both sides:

\qquad expr( [ "*", B_1, "y" ] ) STD_FORM_COMP_1 expr([ "+", [ "*", -A_1, "x" ], C_1 ])

Divide both sides by B_1. Since you're multiplying or dividing by a negative number, don't forget to flip the inequality sign:

\qquad y COMP_1 expr([ "+", "\\dfrac{" + expr([ "*", -A_1, "x" ]) + "}{" + B_1 + "}", "\\dfrac{" + C_1 + "}{" + B_1 + "}" ])

\qquad y COMP_1 \color{purple}{PRETTY_SLOPE_1} x \color{gray}{+ YINT_1}

The y-intercept is YINT_1 and the slope is decimalFraction( SLOPE_1, true, true ). Since the y-intercept is YINT_1, the line must pass through the point (0, YINT_1).

The slope is decimalFraction( SLOPE_1, true, true ). Remember that the slope tells you rise over run. So in this case for every abs( SLOPE_FRAC_1[0] ) "position" + ( abs( SLOPE_FRAC_1[0] ) !== 1 ? "s" : "" ) you move down (because it's negative) up you must also move SLOPE_FRAC_1[1] "position" + ( abs( SLOPE_FRAC_1[1] ) !== 1 ? "s" : "" ) to the right. So the line must also pass through (SLOPE_FRAC_1[1], YINT_1 + SLOPE_FRAC_1[0])

Since our inequality has a LESS_THAN_1 ? "less-than" : "greater-than"INCLUSIVE_1 ? " or equal to" : "" sign, that means that any point LESS_THAN_1 ? "below" : "above" the line is a solution to the inequality, so the area LESS_THAN_1 ? "below" : "above" the line should be shaded.

Note that since the sign is LESS_THAN_1 ? "less-than" : "greater-than" or equal to, any point on the line is also a solution, so the line should be solid.

Note that since the sign is LESS_THAN_1 ? "less-than" : "greater-than" (and not equal to), any point on the line is not part of the solution, so the line should be dashed to indicate this.

Convert the second inequality, expr([ "+", [ "*", A_2, "x" ], [ "*", B_2, "y" ] ]) STD_FORM_COMP_2 C_2, to slope-intercept form by solving for y.

A_2 < 0 ? "Add" : "Subtract" abs( A_2 )x A_2 < 0 ? "to" : "from" both sides:

\qquad expr( [ "*", B_2, "y" ] ) STD_FORM_COMP_2 expr([ "+", [ "*", -A_2, "x" ], C_2 ])

Divide both sides by B_2. Since you're multiplying or dividing by a negative number, don't forget to flip the inequality sign:

\qquad y COMP_2 expr([ "+", "\\dfrac{" + expr([ "*", -A_2, "x" ]) + "}{" + B_2 + "}", "\\dfrac{" + C_2 + "}{" + B_2 + "}" ])

\qquad y COMP_2 \color{purple}{PRETTY_SLOPE_2} x \color{gray}{+ YINT_2}

The y-intercept is YINT_2 and the slope is decimalFraction( SLOPE_2, true, true ). Since the y-intercept is YINT_2, the line must pass through the point (0, YINT_2).

The slope is decimalFraction( SLOPE_2, true, true ). Remember that the slope tells you rise over run. So in this case for every abs( SLOPE_FRAC_2[0] ) "position" + ( abs( SLOPE_FRAC_2[0] ) !== 1 ? "s" : "" ) you move down (because it's negative) up you must also move SLOPE_FRAC_2[1] "position" + ( abs( SLOPE_FRAC_2[1] ) !== 1 ? "s" : "" ) to the right. So the line must also pass through (SLOPE_FRAC_2[1], YINT_2 + SLOPE_FRAC_2[0])

Since our inequality has a LESS_THAN_2 ? "less-than" : "greater-than"INCLUSIVE_2 ? " or equal to" : "" sign, that means that any point LESS_THAN_2 ? "below" : "above" the line is a solution to the inequality, so the area LESS_THAN_2 ? "below" : "above" the line should be shaded.

Note that since the sign is LESS_THAN_2 ? "less-than" : "greater-than" or equal to, any point on the line is also a solution, so the line should be solid.

Note that since the sign is LESS_THAN_2 ? "less-than" : "greater-than" (and not equal to), any point on the line is not part of the solution, so the line should be dashed to indicate this.

Plot each of the points to determine which are solutions: (POINT_1[0], POINT_1[1]) and (POINT_2[0], POINT_2[1])

style({ stroke: PINK, fill: PINK }, function() { circle( POINT_1, 0.2 ).toBack(); label( POINT_1, "\\color{" + PINK + "}{(" + POINT_1[0] + ", " + POINT_1[1] + ")}", "right" ); circle( POINT_2, 0.2 ).toBack(); label( POINT_2, "\\color{" + PINK + "}{(" + POINT_2[0] + ", " + POINT_2[1] + ")}", "right" ); });

(POINT_1[0], POINT_1[1]) is a solution because it's inside both shaded areas, but (POINT_2[0], POINT_2[1]) is not.

(POINT_1[0], POINT_1[1]) is outside both shaded areas, so it's not a solution, but (POINT_2[0], POINT_2[1]) is a solution.

Both (POINT_1[0], POINT_1[1]) and (POINT_2[0], POINT_2[1]) are solutions because they're inside both shaded areas.

Neither (POINT_1[0], POINT_1[1]) nor (POINT_2[0], POINT_2[1]) are solutions because they are not within both shaded areas.