{{ tocSubheader }}
| {{ 'ml-lesson-number-slides' | message : article.intro.bblockCount }} |
| {{ 'ml-lesson-number-exercises' | message : article.intro.exerciseCount }} |
| {{ 'ml-lesson-time-estimation' | message }} |
Appe (Diskussion | bidrag) (Redigerar graf triangleTypes via JXMagician.) | Appe (Diskussion | bidrag) (Redigerar graf triangleTypes via JXMagician.) | ||
Rad 8: | Rad 8: | ||
<jsxgpre id="triangleTypes" class="jxgbox jsx-canvas"> | <jsxgpre id="triangleTypes" class="jxgbox jsx-canvas"> | ||
− | var b = mlg.board([-1, | + | var b=mlg.board([-1,11,11,-1]); |
− | b. | + | b.xaxis(20,0,'x'); |
− | + | b.yaxis(20,0,'y'); | |
− | + | var f1 = b.func('-(x+1)*(x-7)-12', 'blue', {xMax:3}); | |
− | + | var f2 = b.func('(x)*(x-8) + 20', 'blue', {xMin:4}); | |
− | + | var f1 = b.func('4', 'blue', {xMin:3, xMax:4}); | |
− | + | var f3 = b.func('3*x-18', 'red'); | |
− | + | var t1 = b.legend(f3,[7,3],'Strängt växande funktion', {fontSize:1.1, mathMode:false}); | |
− | + | var t2 = b.legend(f2,[6,8],'Växande funktion', {mathMode:false}); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | p1.on('drag',function(){ | + | |
− | var l1 = pol.borders[0].L(); | + | var b = mlg.board([-1,5,6,-2],{grid:false, canvas:true, renderer:'canvas'}); |
− | var l2 = pol.borders[1].L(); | + | b.node(0,0); |
− | + | var radiusSize = 0.6; | |
− | + | var radiusFactor = 0.00043*b.board.canvasWidth; | |
− | + | mlg.af("triangleTypes.start", function(){ | |
− | + | b.remove(); | |
− | + | var p1 = b.point(0,0,{fixed:false}); | |
+ | var p2 = b.point(5,0,{fixed:false}); | ||
+ | var p3 = b.point(2.5,3,{fixed:false}); | ||
+ | var pol = b.polygon([p1,p2,p3],{fillColor:'none',borders:{strokeWidth:2.1}}); | ||
+ | var ang1 = b.nonreflexangle(p2,p1,p3,{fillColor:'blue',radius:radiusSize,orthoType:'square',fillOpacity:0.5,strokeWidth:1.6}); | ||
+ | var ang2 = b.nonreflexangle(p3,p2,p1,{fillColor:'green',radius:radiusSize,orthoType:'square',fillOpacity:0.5,strokeWidth:1.6}); | ||
+ | var ang3 = b.nonreflexangle(p1,p3,p2,{fillColor:'red',radius:radiusSize,orthoType:'square',fillOpacity:0.5,strokeWidth:1.6}); | ||
+ | var dra1 = b.txt(p1.X(),p1.Y()-0.5,'<!--T:8--> Drag mig',{fontSize:1,mathMode:false}); | ||
+ | var dra2 = b.txt(p2.X(),p2.Y()-0.5,'<!--T:9--> Drag mig',{fontSize:1,mathMode:false}); | ||
+ | var dra3 = b.txt(p3.X(),p3.Y()+0.5,'<!--T:10--> Drag mig',{fontSize:1,mathMode:false}); | ||
+ | var hat1 = b.hatch(pol.borders[0], 1,{opacity:0}); | ||
+ | var hat2 = b.hatch(pol.borders[1], 1,{opacity:0}); | ||
+ | var hat3 = b.hatch(pol.borders[2], 1,{opacity:0}); | ||
+ | |||
+ | p1.on('drag',function(){ | ||
+ | var l1 = pol.borders[0].L(); | ||
+ | var l2 = pol.borders[1].L(); | ||
+ | var l3 = pol.borders[2].L(); | ||
+ | shrinkAngle(ang1,ang2,ang3,l1,l2,l3); | ||
+ | checkBorder([p1,p2,p3]); | ||
+ | b.hide([dra1,dra2,dra3]); | ||
+ | evenSides(hat1,hat2,hat3,pol,l1,l2,l3); | ||
+ | }); | ||
+ | p2.on('drag',function(){ | ||
+ | var l1 = pol.borders[0].L(); | ||
+ | var l2 = pol.borders[1].L(); | ||
+ | var l3 = pol.borders[2].L(); | ||
+ | shrinkAngle(ang1,ang2,ang3,l1,l2,l3); | ||
+ | checkBorder([p1,p2,p3]); | ||
+ | b.hide([dra1,dra2,dra3]); | ||
+ | evenSides(hat1,hat2,hat3,pol,l1,l2,l3); | ||
+ | }); | ||
+ | p3.on('drag',function(){ | ||
+ | var l1 = pol.borders[0].L(); | ||
+ | var l2 = pol.borders[1].L(); | ||
+ | var l3 = pol.borders[2].L(); | ||
+ | shrinkAngle(ang1,ang2,ang3,l1,l2,l3); | ||
+ | checkBorder([p1,p2,p3]); | ||
+ | b.hide([dra1,dra2,dra3]); | ||
+ | evenSides(hat1,hat2,hat3,pol,l1,l2,l3); | ||
+ | }); | ||
+ | b.board.update(); | ||
}); | }); | ||
− | p2.on('drag',function(){ | + | |
− | + | mlg.af("triangleTypes.ratvink", function(){ | |
− | + | b.remove(); | |
− | + | var p2 = b.point(5,0,{fixed:false}); | |
− | + | var p3 = b.point(0,3,{fixed:false}); | |
− | + | var p1 = b.node(function(){return p3.X();},function(){return p2.Y();}); | |
− | + | var pol = b.polygon([p1,p2,p3],{fillColor:'none',borders:{strokeWidth:2.1}}); | |
− | + | var ang2 = b.nonreflexangle(p1,p2,p3,{fillColor:'green',radius:radiusSize,orthoType:'square',fillOpacity:0.5,strokeWidth:1.6}); | |
− | + | var ang1 = b.nonreflexangle(p2,p1,p3,{fillColor:'blue',radius:radiusSize,orthoType:'square',fillOpacity:0.5,strokeWidth:1.6}); | |
− | + | var ang3 = b.nonreflexangle(p1,p3,p2,{fillColor:'red',radius:radiusSize,orthoType:'square',fillOpacity:0.5,strokeWidth:1.6}); | |
− | + | var dra2 = b.txt(p3.X(),p3.Y()+0.5,'<!--T:11--> Drag mig',{fontSize:1, mathMode:false}); | |
− | + | var dra3 = b.txt(p2.X(),p2.Y()-0.5,'<!--T:12--> Drag mig',{fontSize:1, mathMode:false}); | |
− | + | p2.on('drag',function(){ | |
− | + | var l1 = pol.borders[0].L(); | |
− | + | var l2 = pol.borders[1].L(); | |
− | + | var l3 = pol.borders[2].L(); | |
− | + | shrinkAngle(ang1,ang2,ang3,l1,l2,l3); | |
+ | checkBorder([p1,p2,p3]); | ||
+ | b.hide([dra2,dra3]); | ||
+ | }); | ||
+ | p3.on('drag',function(){ | ||
+ | var l1 = pol.borders[0].L(); | ||
+ | var l2 = pol.borders[1].L(); | ||
+ | var l3 = pol.borders[2].L(); | ||
+ | shrinkAngle(ang1,ang2,ang3,l1,l2,l3); | ||
+ | checkBorder([p1,p2,p3]); | ||
+ | b.hide([dra2,dra3]); | ||
+ | }); | ||
+ | b.board.update(); | ||
}); | }); | ||
− | |||
− | |||
− | mlg.af("triangleTypes. | + | mlg.af("triangleTypes.liksid", function(){ |
− | + | b.remove(); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | var p3 = b.point(2.5,4.375,{fixed:false}); | |
− | + | var p2 = b.node(function(){return 2.5+(p3.Y()*0.575);},0); | |
+ | var p1 = b.node(function(){return 2.5-(p3.Y()*0.575);},0); | ||
− | + | var pol = b.polygon([p1,p2,p3],{fillColor:'none',borders:{strokeWidth:2.1}}); | |
− | + | var ang1 = b.nonreflexangle(p2,p1,p3,{fillColor:'blue',radius:0.5,fillOpacity:0.5,strokeWidth:1.6}); | |
− | + | var ang2 = b.nonreflexangle(p3,p2,p1,{fillColor:'blue',radius:0.5,fillOpacity:0.5,strokeWidth:1.6}); | |
+ | var ang3 = b.nonreflexangle(p1,p3,p2,{fillColor:'blue',radius:0.5,fillOpacity:0.5,strokeWidth:1.6}); | ||
+ | var dra3 = b.txt(p3.X(),p3.Y()+0.5,'<!--T:13--> Drag mig',{fontSize:1, mathMode:false}); | ||
+ | var hat1 = b.hatch(pol.borders[0], 2); | ||
+ | var hat2 = b.hatch(pol.borders[1], 2); | ||
+ | var hat3 = b.hatch(pol.borders[2], 2); | ||
+ | var rad = ang1.Radius(); | ||
+ | var pp1 = b.polarnode(p1,30,rad+0.1); | ||
+ | var pp2 = b.polarnode(p1,30,rad-0.1); | ||
+ | var pp3 = b.polarnode(p2,150,rad+0.1); | ||
+ | var pp4 = b.polarnode(p2,150,rad-0.1); | ||
+ | var pp5 = b.polarnode(p3,270,rad+0.1); | ||
+ | var pp6 = b.polarnode(p3,270,rad-0.1); | ||
+ | var seg1 = b.segment(pp1,pp2,{strokeWidth:2}); | ||
+ | var seg2 = b.segment(pp3,pp4,{strokeWidth:2}); | ||
+ | var seg3 = b.segment(pp5,pp6,{strokeWidth:2}); | ||
+ | p3.on('drag',function(){ | ||
+ | var l1 = pol.borders[0].L(); | ||
+ | var l2 = pol.borders[1].L(); | ||
+ | var l3 = pol.borders[2].L(); | ||
+ | b.remove([seg1,seg2,seg3]); | ||
+ | shrinkAngle(ang1,ang2,ang3,l1,l2,l3); | ||
+ | checkBorder([p1,p2,p3]); | ||
+ | b.hide([dra3]); | ||
+ | b.hide([seg1,seg2,seg3]); | ||
+ | if(p3.X()!==2.5){ | ||
+ | p3.moveTo([2.5,p3.Y()]); | ||
+ | } | ||
+ | }); | ||
+ | var ready=true; | ||
+ | p3.on('up',function(){ | ||
+ | b.remove([seg1,seg2,seg3]); | ||
+ | rad = ang1.Radius(); | ||
+ | if(p3.Y()<=p1.Y()){ | ||
+ | pp1 = b.polarnode(p1,30,-rad+0.1); | ||
+ | pp2 = b.polarnode(p1,30,-rad-0.1); | ||
+ | pp3 = b.polarnode(p2,150,-rad+0.1); | ||
+ | pp4 = b.polarnode(p2,150,-rad-0.1); | ||
+ | pp5 = b.polarnode(p3,270,-rad+0.1); | ||
+ | pp6 = b.polarnode(p3,270,-rad-0.1); | ||
+ | }else{ | ||
+ | pp1 = b.polarnode(p1,30,rad+0.1); | ||
+ | pp2 = b.polarnode(p1,30,rad-0.1); | ||
+ | pp3 = b.polarnode(p2,150,rad+0.1); | ||
+ | pp4 = b.polarnode(p2,150,rad-0.1); | ||
+ | pp5 = b.polarnode(p3,270,rad+0.1); | ||
+ | pp6 = b.polarnode(p3,270,rad-0.1); | ||
+ | } | ||
+ | seg1 = b.segment(pp1,pp2,{strokeWidth:2}); | ||
+ | seg2 = b.segment(pp3,pp4,{strokeWidth:2}); | ||
+ | seg3 = b.segment(pp5,pp6,{strokeWidth:2}); | ||
− | + | }); | |
− | + | b.board.update(); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | b. | ||
− | |||
− | |||
− | |||
}); | }); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | mlg.af("triangleTypes.likben", function(){ | ||
+ | b.remove(); | ||
+ | var p3 = b.point(2.5,2,{fixed:false}); | ||
+ | var p2 = b.node(5,0); | ||
+ | var p1 = b.node(0,0); | ||
+ | var pol = b.polygon([p1,p2,p3],{fillColor:'none',borders:{strokeWidth:2.1}}); | ||
+ | var ang1 = b.nonreflexangle(p2,p1,p3,{fillColor:'blue',radius:radiusSize,orthoType:'square',fillOpacity:0.5,strokeWidth:1.6}); | ||
+ | var ang2 = b.nonreflexangle(p3,p2,p1,{fillColor:'blue',radius:radiusSize,orthoType:'square',fillOpacity:0.5,strokeWidth:1.6}); | ||
+ | var ang3 = b.nonreflexangle(p1,p3,p2,{visible:false,opacity:0,fillOpacity:0.5,strokeWidth:1.6}); | ||
+ | var dra3 = b.textA(0,0.3,'<!--T:14--> Drag mig',{anchor:p3,fontSize:1}); | ||
+ | var hat1 = b.hatch(pol.borders[2], 2); | ||
+ | var hat2 = b.hatch(pol.borders[1], 2); | ||
+ | var rad = ang1.Radius(); | ||
+ | var pp1 = b.polarnode(p1,ang1.Value()/2,rad+0.1,{useRadians:true}); | ||
+ | var pp2 = b.polarnode(p1,ang1.Value()/2,rad-0.1,{useRadians:true}); | ||
+ | var pp3 = b.polarnode(p2,-ang2.Value()/2,-rad+0.1,{useRadians:true}); | ||
+ | var pp4 = b.polarnode(p2,-ang2.Value()/2,-rad-0.1,{useRadians:true}); | ||
+ | var seg1 = b.segment(pp1,pp2,{strokeWidth:2}); | ||
+ | var seg2 = b.segment(pp3,pp4,{strokeWidth:2}); | ||
+ | p3.on('drag',function(){ | ||
+ | b.hide([dra3]); | ||
+ | b.remove([pp1,pp2,pp3,pp4,seg1,seg2]); | ||
+ | b.hide([seg1,seg2]); | ||
+ | if(p3.X()!==2.5){ | ||
+ | p3.moveTo([2.5,p3.Y()]); | ||
+ | } | ||
+ | checkBorder([p3]); | ||
+ | }); | ||
+ | |||
+ | p3.on('up',function(){ | ||
+ | ang1Val = ang1.Value()/2; | ||
+ | ang2Val = ang2.Value()/2; | ||
+ | b.remove([pp1,pp2,pp3,pp4,seg1,seg2]); | ||
+ | rad = ang1.Radius(); | ||
+ | if(p3.Y()<=p1.Y()){ | ||
+ | pp1 = b.polarnode(p1,-ang1Val,rad+0.1,{useRadians:true}); | ||
+ | pp2 = b.polarnode(p1,-ang1Val,rad-0.1,{useRadians:true}); | ||
+ | pp3 = b.polarnode(p2,ang2Val,-rad+0.1,{useRadians:true}); | ||
+ | pp4 = b.polarnode(p2,ang2Val,-rad-0.1,{useRadians:true}); | ||
+ | }else{ | ||
+ | pp1 = b.polarnode(p1,ang1Val,rad+0.1,{useRadians:true}); | ||
+ | pp2 = b.polarnode(p1,ang1Val,rad-0.1,{useRadians:true}); | ||
+ | pp3 = b.polarnode(p2,-ang2Val,-rad+0.1,{useRadians:true}); | ||
+ | pp4 = b.polarnode(p2,-ang2Val,-rad-0.1,{useRadians:true}); | ||
+ | } | ||
+ | seg1 = b.segment(pp1,pp2,{strokeWidth:2}); | ||
+ | seg2 = b.segment(pp3,pp4,{strokeWidth:2}); | ||
+ | }); | ||
+ | b.board.update(); | ||
}); | }); | ||
− | |||
− | |||
− | + | var shrinkAngle = function(ang1,ang2,ang3,l1,l2,l3){ | |
− | + | if(l1<1.5||l2<1.5||l3<1.5||l1+l2<1.07*l3||l2+l3<1.07*l1||l3+l1<1.07*l2){ | |
− | var | + | ang1.setAttribute({visible:false}); |
− | + | ang2.setAttribute({visible:false}); | |
− | + | ang3.setAttribute({visible:false}); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | else{ | |
− | + | ang1.setAttribute({visible:true}); | |
− | + | ang2.setAttribute({visible:true}); | |
− | + | ang3.setAttribute({visible:true}); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | }; | |
− | + | var evenSides = function(hat1,hat2,hat3,pol,l1,l2,l3){ | |
− | + | hat1[0].setAttribute({opacity:0}); | |
− | + | hat2[0].setAttribute({opacity:0}); | |
− | + | hat3[0].setAttribute({opacity:0}); | |
− | + | if(l1 === l2){ | |
− | + | hat1[0].setAttribute({opacity:1}); | |
− | + | hat2[0].setAttribute({opacity:1}); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | var evenSides = function(hat1,hat2,hat3,pol,l1,l2,l3){ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | if ( | + | if(l2 === l3){ |
− | + | hat2[0].setAttribute({opacity:1}); | |
+ | hat3[0].setAttribute({opacity:1}); | ||
} | } | ||
− | if ( | + | if(l3 === l1){ |
− | + | hat3[0].setAttribute({opacity:1}); | |
+ | hat1[0].setAttribute({opacity:1}); | ||
} | } | ||
− | if (points[el].Y()>5) { | + | }; |
− | + | ||
+ | var checkBorder = function(points){ | ||
+ | for (var el = 0; el < points.length; el++){ | ||
+ | if (points[el].X()>6) { | ||
+ | points[el].setPositionDirectly(JXG.COORDS_BY_USER, [6,points[el].Y()]); | ||
+ | } | ||
+ | if (points[el].X()<-1) { | ||
+ | points[el].setPositionDirectly(JXG.COORDS_BY_USER, [-1,points[el].Y()]); | ||
+ | } | ||
+ | if (points[el].Y()<-2) { | ||
+ | points[el].setPositionDirectly(JXG.COORDS_BY_USER, [points[el].X(),-2]); | ||
+ | } | ||
+ | if (points[el].Y()>5) { | ||
+ | points[el].setPositionDirectly(JXG.COORDS_BY_USER, [points[el].X(),5]); | ||
+ | } | ||
} | } | ||
− | + | }; | |
− | }; | + | mlg.cf("triangleTypes.start"); |
− | mlg.cf("triangleTypes.start"); | + | var crop1 = b.node(-1,5); |
− | var crop1 = b.node(-1,5); | + | var crop2 = b.node(6,-2); |
− | var crop2 = b.node(6,-2); | + | b.cropA(0.5); |
− | b.cropA(0.5); | + | |
</jsxgpre> | </jsxgpre> | ||
När man räknar ut arean av en triangel använder man basen och höjden. Med triangelns bas menar man någon av sidorna, oftast den som är ritad horisontellt, och med höjden menar man det rätvinkliga avståndet från basen till motstående hörn.