正剧开始:
星历2016年03月07日 08:39:00, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[不等式与不等式组]。
蓝色线表示的是不等式的左边,红色线是表示的不等式的右边,y轴表示的是左边或右边的值。
可以看出,当购买的商品总价比较少时,蓝色线的值比较小,表示较便宜,如果买得多了,
红色线会更便宜。但转折点在哪里,并不怎么能看得清楚。
<span style="font-size:18px;">function myDraw() { var config = new PlotConfiguration(); config.init(); config.setPreference(); var r = 10; config.setSector(1,1,1,1); config.graphPaper2D(0, 0, r); config.axis2D(0, 0, 180); var xArray = [-300, 300]; var yArray1 = [], yArray2 = []; for (var i = 0; i < 2; i++) { yArray1.push([xArray[i], 50+0.95*(xArray[i]-50)]); yArray2.push([xArray[i], 100+0.9*(xArray[i]-100)]); } shape.multiLineDraw(yArray1, 'blue'); shape.multiLineDraw(yArray2, 'red'); }</span>
从这个图来看,或许转折点是在x=150处,是不是呢,小伟决定算一下:
...
经过计算,确实当x=150时红。蓝线的值相等。
小伟想试一试能不能用区域来表示出不等式组的范围:
<span style="font-size:18px;">function myDraw() { var config = new PlotConfiguration(); config.init(); config.setPreference(); var r = 10; config.setSector(1,1,1,1); config.graphPaper2D(0, 0, r); config.axis2D(0, 0, 180); var x = [-300, 300], y; var y1 = [], y2 = []; plot.setGlobalAlpha(0.5) .setGlobalCompositeOperation('source-over'); for (var i = 0; i < 2; i++) { y = 40; y1.push([x[i], y]); y1.push([x[i], y+600]); }; var tmp = shape.angularSort(y1); shape.fillDraw(tmp, 'blue'); for (var i = 0; i < 2; i++) { y = 50; y2.push([x[i], y]); y2.push([x[i], y-600]); }; tmp = shape.angularSort(y2); shape.fillDraw(tmp, 'yellow'); //shape.multiLineDraw(yArray2, 'red'); }</span>
<span style="font-size:18px;">function myDraw() { var config = new PlotConfiguration(); config.init(); config.setPreference(); var r = 10; config.setSector(1,1,1,1); config.graphPaper2D(0, 0, r); config.axis2D(0, 0, 180); var x = [40, 50], y; var y1 = [], y2 = []; plot.setGlobalAlpha(0.6) .setGlobalCompositeOperation('source-over'); x = 40; y1.push([x, -300]); y1.push([x, 300]); y1.push([x+600, 300]); y1.push([x+600, -300]); var tmp = shape.angularSort(y1); shape.fillDraw(tmp, 'blue'); x = 50; y2.push([x, -300]); y2.push([x, 300]); y2.push([x-600, 300]); y2.push([x-600, -300]); tmp = shape.angularSort(y2); shape.fillDraw(tmp, 'red'); //shape.multiLineDraw(yArray2, 'red'); }</span>
这些球无法随心所欲地放到它们应该在的地方。
于是小伟做了改进:
这下就排得整齐了吧。
<span style="font-size:18px;">function myDraw() { var config = new PlotConfiguration(); config.init(); config.setPreference(); var r = 50; config.setSector(1,1,1,1); config.graphPaper3D(1, 0, 0, r); config.axis3D(0, 0, 0, 180); plot.save() .translate(0, -r+0.707*r); for (var i = -10; i < 10; i+=5) {//z向 for (var j = -1; j < 0; j++) {//y向 for (var k = -5; k < 5; k+=1) {//x向 if (Math.abs(i * r) > 300 || Math.abs(k *r) > 300) continue; shape.sphere([k*r, 0*r, 0*r], r/3, 'yellow'); } } } plot.restore(); }</span>
<span style="font-size:18px;">//绘制球体 this.sphere = function(pos/*[x, y, z]*/, r, style) { plot.save(); var x, y; var p = [].concat(pos); if (p.length == 2) { x = p[0]; y = p[1]; } else if (p.length == 3) { var p1 = shape.point3D(p[0], -p[1], p[2]); x = p1[0]; y = p1[1]; } var r0 = 0.1*r; var grd = plot.createRadialGradient(x, y, r, x+0.3*r, y-0.3*r, r0); grd.addColorStop(0, style); grd.addColorStop(1, 'white'); plot.setFillStyle(grd); shape.fillCircle(x, y, r); plot.restore(); }</span>
<span style="font-size:18px;">this.strokeCubic = function(x0, y0, z0, r, style) { plot.save(); x0 *= r; y0 *= r; z0 *= r; r *= 0.5; var array = [[-r, -r], [-r, r], [r, r], [r, -r]]; var top = []; var left = []; var front = []; var x, y, z; //存放临时点 var p = []; for (var i = 0; i < 4; i++) { x = (x0+array[i][0]); y = y0+r; z = (z0+array[i][1]); p = this.point3D(x, y, z); top.push([p[0], -p[1]]); } for (var i = 0; i < 4; i++) { x = x0+r; y = (y0+array[i][0])+2*r; z = z0+array[i][1]; p = this.point3D(x, y, z); left.push([p[0], -p[1]]); } for (var i = 0; i < 4; i++) { x = x0+array[i][0]; y = (y0+array[i][1])+2*r; z = z0+r; p = this.point3D(x, y, z); front.push([p[0], -p[1]]); } var tmp = [].concat(top); shape.fillDraw(tmp, style); tmp=[].concat(top); shape.strokeDraw(tmp, '#cccccc'); tmp = [].concat(left); shape.strokeDraw(left, 'black'); tmp = [].concat(front); shape.strokeDraw(front, 'black'); plot.restore(); }</span>
<span style="font-size:18px;">function myDraw() { var config = new PlotConfiguration(); config.init(); config.setPreference(); var r = 50; config.setSector(1,1,1,1); config.graphPaper3D(1, 0, 0, r); config.axis3D(0, 0, 0, 180); var array = []; plot.save() .translate(0, -r+0.707*r); for (var i = -5; i < 10; i+=5) {//z向 for (var j = -1; j < 0; j++) {//y向 for (var k = -5; k < 5; k+=1) {//x向 if (Math.abs(i * r) > 300 || Math.abs(k *r) > 300) continue; array.push([k*r, 0*r, i*r]); } } } for (var i = -10; i <= 10; i+=2) {//z向 for (var j = -1; j < 0; j++) {//y向 for (var k = -5; k <= 5; k+=5) {//x向 if (Math.abs(i * r) > 300 || Math.abs(k *r) > 300) continue; array.push([k*r, 0*r, i*r]); } } } array = shape.xyzSort(array); var len = array.length; for (var i =0; i < len; i++) { if (i%3==0) { shape.sphere(array[i], r/3, 'red'); } else if (i%4==0) { shape.sphere(array[i], r/3, 'blue'); } else { shape.sphere(array[i], r/3, 'green'); } } plot.restore(); }</span>
红、紫是一家,蓝、绿是一家,谁会赢呢?
<span style="font-size:18px;">function myDraw() { var config = new PlotConfiguration(); config.init(); config.setPreference(); var r = 10; config.setSector(1,1,1,1); config.graphPaper3D(1, 0, 0, r); config.axis3D(0, 0, 0, 180); var array = []; plot.save() .translate(0, -r+0.707*r); for (var i = -19; i <= 19; i+=5) {//z向 for (var j = -1; j < 0; j++) {//y向 for (var k = -19; k <=19; k+=1) {//x向 if (Math.abs(i * r) > 300 || Math.abs(k *r) > 300) continue; array.push([k*r, 0*r, i*r]); } } } for (var i = -19; i <= 19; i+=2) {//z向 for (var j = -1; j < 0; j++) {//y向 for (var k = -19; k <= 19; k+=5) {//x向 if (Math.abs(i * r) > 300 || Math.abs(k *r) > 300) continue; array.push([k*r, 0*r, i*r]); } } } array = shape.xyzSort(array); var len = array.length; for (var i =0; i < len; i++) { if (i%6==0) { shape.sphere(array[i], r/3, 'red'); } else if (i%4==0) { shape.sphere(array[i], r/3, 'blue'); } else if (i%5 == 0) { shape.sphere(array[i], r/3, 'purple'); } else { shape.sphere(array[i], r/3, 'green'); } } plot.restore(); } function myDraw() { var config = new PlotConfiguration(); config.init(); config.setPreference(); var r = 50; config.setSector(1,1,1,1); config.graphPaper2D(0, 0, r); config.axis2D(0, 0, 180); var xArray = [-300, 300]; var yArray1 = [], yArray2 = []; for (var i = 0; i < 2; i++) { yArray1.push([xArray[i], 50+0.95*(xArray[i]-50)]); yArray2.push([xArray[i], 100+0.9*(xArray[i]-100)]); } shape.multiLineDraw(yArray1, 'blue'); shape.multiLineDraw(yArray2, 'red'); }</span>
<span style="font-size:18px;">function myDraw() { var config = new PlotConfiguration(); config.init(); config.setPreference(); var r = 20; config.setSector(1,1,1,1); config.graphPaper3D(1, 0, 0, r); config.axis3D(0, 0, 0, 180); var array = []; plot.save() .translate(0, -r+0.707*r); for (var i = -19; i <= 19; i+=5) {//z向 for (var j = -1; j < 0; j++) {//y向 for (var k = -19; k <=19; k+=1) {//x向 if (Math.abs(i * r) > 300 || Math.abs(k *r) > 300) continue; array.push([k*r, 0*r, i*r]); } } } for (var i = -19; i <= 19; i+=2) {//z向 for (var j = -1; j < 0; j++) {//y向 for (var k = -19; k <= 19; k+=5) {//x向 if (Math.abs(i * r) > 300 || Math.abs(k *r) > 300) continue; array.push([k*r, 0*r, i*r]); } } } array = shape.xyzSort(array); var len = array.length; for (var i =0; i < len; i++) { if (i%6==0) {//水 shape.sphere(array[i], r/3, 'cyan'); } else if (i%7==0) {//木 shape.sphere(array[i], r/3, 'green'); } else if (i%3 == 0) {//火 shape.sphere(array[i], r/3, 'red'); } else if (i % 4 == 0) {//金 shape.sphere(array[i], r/3, '#E0D0D0'); } else {//土 shape.sphere(array[i], r/3, '#886622'); } } plot.restore(); }</span>