randRangeNonZero(-5, 5) randRange(-5, 5)
randRangeExclude(-5, 5, [0, Y]) randRangeExclude(-5, 5, [0, Y])
(Y - YINT_1) / X (Y - YINT_2) / X toFraction(SLOPE_1, 0.001) toFraction(SLOPE_2, 0.001)
fractionVariable(SLOPE_FRAC_1[0], SLOPE_FRAC_1[1], "x") fractionVariable(SLOPE_FRAC_2[0], SLOPE_FRAC_2[1], "x") 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 === "≤"

Reprezentați grafic următoarele inegalități:

\blue{expr([ "+", [ "*", A_1, "x" ], [ "*", B_1, "y" ] ]) STD_FORM_COMP_1 C_1}

\blue{y COMP_1 PRETTY_SLOPE_1 + YINT_1}

\green{expr([ "+", [ "*", A_2, "x" ], [ "*", B_2, "y" ] ]) STD_FORM_COMP_2 C_2}

\green{y COMP_2 PRETTY_SLOPE_2 + YINT_2}

Inegalitatea 1:

Inegalitatea 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(); }; graph.showCorrect = function() { graph.pointA.setCoord([ 0, YINT_1 ]); graph.pointB.setCoord([ SLOPE_FRAC_1[1], YINT_1 + SLOPE_FRAC_1[0] ]); graph.pointC.setCoord([ 0, YINT_2 ]); graph.pointD.setCoord([ SLOPE_FRAC_2[1], YINT_2 + SLOPE_FRAC_2[0] ]); graph.shadetop1 = graph.pointA.coord[0] > graph.pointB.coord[0] ? LESS_THAN_1 : !LESS_THAN_1; graph.shadetop2 = graph.pointC.coord[0] > graph.pointD.coord[0] ? LESS_THAN_2 : !LESS_THAN_2; if ( INCLUSIVE_1 ) { graph.dasharray1 = ''; $( 'input[name=dashradio1][value=solid]' ).attr( 'checked', true ); } else { graph.dasharray1 = '- '; $( 'input[name=dashradio1][value=dashed]' ).attr( 'checked', true ); } if ( INCLUSIVE_2 ) { graph.dasharray2 = ''; $( 'input[name=dashradio2][value=solid]' ).attr( 'checked', true ); } else { graph.dasharray2 = '- '; $( 'input[name=dashradio2][value=dashed]' ).attr( 'checked', true ); } graph.update(); }; // 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();
[ 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) || (abs(SLOPE_2 - slope1) < 0.001 && abs(YINT_2 - yint1) < 0.001 && guess[2] === LESS_THAN_2 && guess[3] === INCLUSIVE_2 && abs(SLOPE_1 - slope2) < 0.001 && abs(YINT_1 - yint2) < 0.001 && guess[6] === LESS_THAN_1 && guess[7] === INCLUSIVE_1);
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 = ""; $( "input[name=dashradio1][value=solid]" ).attr( "checked", true ); } else { graph.dasharray1 = "- "; $( "input[name=dashradio1][value=dashed]" ).attr( "checked", true ); } if ( guess[7] ) { graph.dasharray2 = ""; $( "input[name=dashradio2][value=solid]" ).attr( "checked", true ); } else { graph.dasharray2 = "- "; $( "input[name=dashradio2][value=dashed]" ).attr( "checked", true ); } graph.update();

Putem începe prin a aduce inegalitatea în forma standard, adică să o scriem în funcție de y:
expr([ "+", [ "*", A_1, "x" ], [ "*", B_1, "y" ] ]) STD_FORM_COMP_1 C_1

Dacă adăugăm abs( A_1 )x de ambele părți, obținem:

Dacă scădem abs( A_1 )x de ambele părți, obținem:

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

Trebuie să împărțim în ambele părți prin B_1 . Pentru că înmulțim sau împărțim printr-un număr negativ, trebuie să schimbăm semnul inegalității:

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

Pentru prima inegalitate:

\qquad y COMP_1 \color{purple}{PRETTY_SLOPE_1} \red{+ YINT_1}

Intersecția cu axa y este YINT_1 iar panta are valoarea decimalFraction( SLOPE_1, true, true ). Aceasta înseamnă că dreapta va trece prin punctul de coordonate (0, YINT_1).

Pentru că aveam o pantă cu valoarea de decimalFraction( SLOPE_1, true, true ) pentru fiecare "pas" pe care l-am face pe grafic ar trebui să ne mutăm abs( SLOPE_FRAC_1[0] ) poziții în jos (pentru că este negativă) în sus. pentru fiecare "pas" pe care l-am face pe grafic ar trebui să ne mutăm abs( SLOPE_FRAC_1[0] ) poziție în jos (pentru că este negativă) în sus. De asemenea pentru fiecare "pas" pe care l-am face ar trebui să ne mutăm și SLOPE_FRAC_1[1] poziții la dreapta. De asemenea pentru fiecare "pas" pe care l-am face ar trebui să ne mutăm și SLOPE_FRAC_1[1] poziție la dreapta. Așadar dreapta ar trebui să treacă prin (SLOPE_FRAC_1[1], YINT_1 + SLOPE_FRAC_1[0]).

Pentru că inegalitatea noastră are un semn de mai mic sau egal, înseamnă că orice punct sub dreaptă este o soluție a inegalității. Așadar regiunea de sub dreaptă ar trebui colorată.

Pentru că inegalitatea noastră are un semn de mai mare sau egal, înseamnă că orice punct de deasupra dreptei este o soluție a inegalității. Așadar regiunea de deasupra dreptei ar trebui colorată.

Pentru că inegalitatea noastră are un semn de mai mic sau egal, orice punct de pe dreapta este de asemenea o soluție. Așa că linia ar trebui să fie continuă. line should be solid. Pentru că inegalitatea noastră are un semn de mai mare sau egal, orice punct de pe dreapta este de asemenea o soluție. Așa că linia ar trebui să fie continuă.

Pentru că inegalitatea noastră are un semn de mai mic (dar nu și egal cu), orice punct de pe dreapta nu este o soluție. Așa că linia ar trebui să fie întreruptă. Pentru că inegalitatea noastră are un semn de mai mare (dar nu și egal cu), orice punct de pe dreapta nu este o soluție. Așa că linia ar trebui să fie întreruptă.

Pentru a doua ineglitate trebuie la fel să o aducem la forma generală:
expr([ "+", [ "*", A_2, "x" ], [ "*", B_2, "y" ] ]) STD_FORM_COMP_2 C_2

Dacă adăugăm abs( A_2 )x, obținem :

Dacă scădem abs( A_2 )x ,obținem:

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

Trebuie să împărțim în ambele părți prin B_2 . Pentru că înmulțim sau împărțim printr-un număr negativ, trebuie să schimbăm semnul inegalității:

\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} \red{+ YINT_2}

Intersecția cu axa y este YINT_2 iar panta are valoarea decimalFraction( SLOPE_2, true, true ). Aceasta înseamnă că dreapta va trece prin punctul de coordonate (0, YINT_1).

Pentru că aveam o pantă cu valoarea de decimalFraction( SLOPE_2, true, true ) pentru fiecare "pas" pe care l-am face pe grafic ar trebui să ne mutăm abs( SLOPE_FRAC_2[0] ) poziții în jos (pentru că este negativă) în sus. pentru fiecare "pas" pe care l-am face pe grafic ar trebui să ne mutăm abs( SLOPE_FRAC_2[0] ) poziție în jos (pentru că este negativă) în sus. De asemenea pentru fiecare "pas" pe care l-am face ar trebui să ne mutăm și SLOPE_FRAC_2[1] poziții la dreapta. De asemenea pentru fiecare "pas" pe care l-am face ar trebui să ne mutăm și SLOPE_FRAC_2[1] poziție la dreapta. Așadar dreapta ar trebui să treacă prin (SLOPE_FRAC_2[1], YINT_2 + SLOPE_FRAC_2[0]).

Pentru că inegalitatea noastră are un semn de mai mic sau egal, înseamnă că orice punct sub dreaptă este o soluție a inegalității. Așadar regiunea de sub dreaptă ar trebui colorată.

Pentru că inegalitatea noastră are un semn de mai mare sau egal, înseamnă că orice punct de deasupra dreptei este o soluție a inegalității. Așadar regiunea de deasupra dreptei ar trebui colorată.

Pentru că inegalitatea noastră are un semn de mai mic sau egal, orice punct de pe dreapta este de asemenea o soluție. Așa că linia ar trebui să fie continuă. line should be solid. Pentru că inegalitatea noastră are un semn de mai mare sau egal, orice punct de pe dreapta este de asemenea o soluție. Așa că linia ar trebui să fie continuă.

Pentru că inegalitatea noastră are un semn de mai mic (dar nu și egal cu), orice punct de pe dreapta nu este o soluție. Așa că linia ar trebui să fie întreruptă. Pentru că inegalitatea noastră are un semn de mai mare (dar nu și egal cu), orice punct de pe dreapta nu este o soluție. Așa că linia ar trebui să fie întreruptă.