[从头学数学] 第132节 轴对称

剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入了筑基中期的修炼,
这次要修炼的目标是[轴对称]。

正剧开始:

星历2016年03月11日 14:42:08, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[轴对称]。










<span style="font-size:18px;">//题6
function myDraw(xGlobal, yGlobal) {  
	var config = new PlotConfiguration();      
	config.init();  
	
	config.setPreference();  
	var r = 20;
	config.setSector(1,1,1,1);  
	config.graphPaper2D(0, 0, r);
	config.axis2D(0, 0,180);  

	var a = [[3,0], [0, 3], [1, 4], [4,1]];
	//对称轴
	var sym = [4, 0];
	var len = a.length;
	for (var i = 0; i < len; i++) {
		a.push([2*sym[0]-a[i][0], a[i][1]]);
	}
	
	var b = shape.angularSort(a);
	var tmp = [].concat(b);
	plot.translate(-sym[0]*2*r, 0);
	shape.angleDraw(tmp, 'blue', 2*r);
	
	plot.fillText('E->D->C->G->A->B->E', -100, 100, 200);
	
	
}</span>


小球的运动轨迹并不是图中蓝色的线,这只是小伟做的一个研究而已。



这个关于x轴或y轴轴对称的倒好办,但关于任意直线轴对称的点的关系是什么呢?

各种资料找了又找,终于让阿伟找到了一组方程,于是阿伟用它来画了一下关于[过坐标原点直线]的对称的图:

<span style="font-size:18px;">function myDraw(xGlobal, yGlobal) {  
	var config = new PlotConfiguration();      
	config.init();  
	
	config.setPreference();  
	var r = 20;
	config.setSector(1,1,1,1);  
	config.graphPaper2D(0, 0, r);
	config.axis2D(0, 0,180);  

	var a = [[3,0], [0, 3], [1, 4]];
	var k = Math.tan(-Math.PI/6);
	
	var len = a.length;
	var b = [];
	var x, y;
	
	for (var i = 0; i < len; i++) {
		
		 //x1=(m-2kb+2kn-mk^2)/(1+k^2)
		//y1=(-n+2b+2km+nk^2)/(1+k^2)
		if (k != NaN) {
			var m = a[i][0], n = a[i][1];
			x = (m-2*k+2*k*n-m*k*k)/(1+k*k);
			y = (-n+2*k*m+n*k*k)/(1+k*k);
			b.push([x,y]);
		}
	}
	
	shape.strokeDraw(a, 'red', r);
	shape.strokeDraw(b, 'blue', r);
		
	
	
}
</span>

效果就是这样了:


<span style="font-size:18px;">	var a = [[3,0], [0, 3], [1, 4], [7, 2], [-7, 2]];
	var k = Math.tan(-Math.PI/5);</span>


<span style="font-size:18px;">function myDraw(xGlobal, yGlobal) {  
	var config = new PlotConfiguration();      
	config.init();  
	
	config.setPreference();  
	var r = 20;
	config.setSector(1,1,1,1);  
	config.graphPaper2D(0, 0, r);
	config.axis2D(0, 0,180);  

	var a = [[3,0], [0, 3], [1, 4], [7, 2], [-7, 2]];
	var k = Math.tan(-Math.PI/5);
	
	var len = a.length;

	var b = [];
	var x, y;
	
	for (var i = 0; i < len; i++) {
		b.push([a[i][0], a[i][1]]);
	}
	
	for (var i = 0; i < len; i++) {
		
		 //x1=(m-2kb+2kn-mk^2)/(1+k^2)
		//y1=(-n+2b+2km+nk^2)/(1+k^2)
		if (k != NaN) {
			var m = a[i][0], n = a[i][1];
			x = (m-2*k+2*k*n-m*k*k)/(1+k*k);
			y = (-n+2*k*m+n*k*k)/(1+k*k);
			b.push([x,y]);
		}
	}
	
	var c = shape.angularSort(b);
	//shape.strokeDraw(a1, 'red', r);
	shape.strokeDraw(c, 'blue', r);
		
	
	
}
</span>


关于这些手拉手的猴子,小伟尽管做了多次尝试,现在还是没法成功完成。

现在只能做到这个程度:


<span style="font-size:18px;">function myDraw(xGlobal, yGlobal) {  
	var config = new PlotConfiguration();      
	config.init();  
	
	config.setPreference();  
	var r = 15;
	config.setSector(1,1,1,1);  
	config.graphPaper2D(0, 0, r);
	config.axis2D(0, 0,180);  

	var a = [[10, -20]];	
	var r0 = 2, r1= 2*r0, r2=2*r1;
	//圆弧角度的起始
	var beg, end;
	
	var central = shape.nEdge(0, 0, 10*r, 8);
	var len = central.length;
	var pangle = Math.PI*24/len;
	for (var i = 0; i < len; i++) {		
		
		plot.save();
		plot.translate(central[i][0], central[i][1]);
		
		plot.rotate(pangle*i);
		a = [[20, -30]];
		//
		shape.strokeCircle(a[0][0], a[0][1], r0);
		shape.strokeCircle(a[0][0], a[0][1], r1);
		beg = -Math.PI/2-Math.PI/6, end = Math.PI/2;
		plot.beginPath()
			.arc(a[0][0], a[0][1], Math.abs(a[0][1]), beg, end, 0)
			.moveTo(a[0][0], a[0][1]-Math.abs(a[0][1]))
			.closePath()
			.stroke();
		beg = -Math.PI/2;
		end = Math.PI/2-Math.PI/6;
		plot.beginPath()
			.arc(a[0][0], -a[0][1], Math.abs(a[0][1]), beg, end, 1)
			.moveTo(a[0][0], a[0][1]+Math.abs(a[0][1]))
			.closePath()
			.stroke();
		
		plot.beginPath()
			.moveTo(a[0][0]-r2/2, -a[0][1]+r2/2)
			.lineTo(a[0][0]+r2/2, -a[0][1]-r2/2)
			.closePath()
			.stroke();
			
		//对称
		a[0][0] = -a[0][0];
		
		//
		shape.strokeCircle(a[0][0], a[0][1], r0);
		shape.strokeCircle(a[0][0], a[0][1], r1);
		beg = Math.PI/2, end = -Math.PI/2+Math.PI/6;
		plot.beginPath()
			.arc(a[0][0], a[0][1], Math.abs(a[0][1]), beg, end, 0)
			.moveTo(a[0][0], a[0][1]-Math.abs(a[0][1]))
			.closePath()
			.stroke();
		beg = Math.PI/2+Math.PI/6;
		end = -Math.PI/2;
		plot.beginPath()
			.arc(a[0][0], -a[0][1], Math.abs(a[0][1]), beg, end, 1)
			.moveTo(a[0][0], a[0][1]+Math.abs(a[0][1]))
			.closePath()
			.stroke();
		
		plot.beginPath()
			.moveTo(a[0][0]-r2/2, -a[0][1]-r2/2)
			.lineTo(a[0][0]+r2/2, -a[0][1]+r2/2)
			.closePath()
			.stroke();
			
		plot.translate(-central[i][0], -central[i][1]);
		plot.restore();
		
	
	}
	

}</span>

不过,小伟也发现自己犯了一个很大的错误,像这种图应该一开始就把所有用到的点都算出来,

而不是用API来一点点的画。白白浪费感情了。








<span style="font-size:18px;">//题3
function myDraw(xGlobal, yGlobal) {  
	var config = new PlotConfiguration();      
	config.init();  
	
	config.setPreference();  
	var r = 20;
	config.setSector(1,1,1,1);  
	config.graphPaper2D(0, 0, r);
	config.axis2D(0, 0,180);  

	var a = shape.nStar(0, 0, 8*r, 5, -Math.PI/2);
	var len = a.length;
	
	var tmp = [];
	tmp = [].concat(a);
	shape.angleDraw(tmp, 'red');
	

}</span>

<span style="font-size:18px;">function myDraw(xGlobal, yGlobal) {  
	var config = new PlotConfiguration();      
	config.init();  
	
	config.setPreference();  
	var r = 15;
	config.setSector(1,1,1,1);  
	config.graphPaper2D(0, 0, r);
	config.axis2D(0, 0,180);  

    var triangle = new  Triangle();  
    var a = triangle.know2angles([84-42, 42], 2*15);  
    var tmp = [].concat(a);  
    shape.angleDraw(tmp, 'red', 4);  
      
    var s = triangle.info();  
    plot.fillText(s, -250, 150, 500); 
	

}</span>


本节到此结束,欲知后事如何,请看下回分解。


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值