剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入了结丹初期的修炼,
这次要修炼的目标是[圆与方程]。

正剧开始:

星历2016年04月11日 15:56:41, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[圆与方程]。

已知圆心位置和半径来画圆,小伟用36边的多边形代替圆,

面积上稍微小了一点。

<span style="font-size:18px;">if (1) {var r = 20;config.setSector(1,1,1,1);config.graphPaper2D(0, 0, r);config.axis2D(0, 0, 180);var transform = new Transform();var a = 5, b = 5, r0 = 5;var array = shape.nEdge(a, b, r0, 36);var scale = r;//array = shape.angularSort(array);shape.areaDraw(transform.translate(array, -200/scale, -200/scale), 'red', scale);shape.strokeDraw([].concat(array), 'orange', scale);}>>> 3.14*25
78.5</span>

知道三个坐标求外接圆的方程,是这样求的:

<span style="font-size:18px;">  if (1) {
//求三角形的外心  var r = 20;    var r0 = 5*r;  config.setSector(1,1,1,1);      config.graphPaper2D(0, 0, r);    config.axis2D(0, 0, 180);  var triangle = new Triangle();  var transform = new Transform();  //已知三角形顶点阵列  var array = [[5, 1], [7, -3], [2, -8]]; //进行缩放转换  // array = transform.scale(array, r);  //三个顶点  var x1 = array[0][0], y1 = array[0][1],  x2 = array[1][0], y2 = array[1][1],  x3 = array[2][0], y3 = array[2][1];  //令  var A1 = 2*(x2-x1), B1 = 2*(y2-y1), C1 = x2*x2+y2*y2-x1*x1-y1*y1,  A2 = 2*(x3-x2), B2 = 2*(y3-y2), C2 = x3*x3+y3*y3-x2*x2-y2*y2;  //得到外心的坐标  var px = ((C1*B2)-(C2*B1))/((A1*B2)-(A2*B1)),  py = ((A1*C2)-(A2*C1))/((A1*B2)-(A2*B1));  //外接圆半径  var a = distance2D(array[0], array[1]),b = distance2D(array[1], array[2]),c = distance2D(array[2], array[0]);var rOut = a*b*c/Math.sqrt(4*b*b*c*c-Math.pow((b*b+c*c-a*a), 2));  //document.write(px.toFixed(2)+', '+py.toFixed(2)+'; ' + rOut.toFixed(2));  var scale = r;shape.angleDraw([].concat(array), 'red', scale);  var circle = shape.nEdge(px, py, rOut, 36);shape.strokeDraw([].concat(circle), 'blue', scale);var s = '外心: ['+px.toFixed(2)+' , ' + py.toFixed(2)+'] ';var s1 = '外接圆半径:'+rOut.toFixed(2);plot.setFillStyle('#FF2288');plot.fillText(s, -270, -170, 300);plot.fillText(s1, -270, -140, 300);}//二维坐标中两点之间的距离
function distance2D(pointA, pointB) {return Math.sqrt(Math.pow(pointA[0]-pointB[0], 2)+Math.pow(pointA[1]-pointB[1], 2));
}
</span>

再来试一个:

<span style="font-size:18px;">        //已知三角形顶点阵列  var array = [[-5, -2], [5, -2], [0, 5]]; </span>

这个还是比较好玩的。

圆的一般方程:

<span style="font-size:18px;">//圆的一般方程
function generalCircle(D, E, F) {//方程x^2+y^2+Dx+Ey+F=0;var rSquare = (D*D+E*E-4*F)/4;if (rSquare > 0) {return shape.nEdge(-D/2, -E/2, Math.sqrt(rSquare), 36);}else {return [];}
}//直线的一般方程
function generalLine(A, B, C) {//方程Ax+By+C = 0;return [[-100, (-100*A+C)/(-B)], [100, (100*A+C)/(-B)]];
}</span>

知道了可以做些什么呢?

如果现在已经知道了D、E、F的值:

<span style="font-size:18px;">  if (1) {var r = 20;    config.setSector(1,1,1,1);      config.graphPaper2D(0, 0, r);    config.axis2D(0, 0, 180);  var scale = r;var circle = generalCircle(-8, 6, 0);shape.strokeDraw([].concat(circle), 'blue', scale);}</span>

这就是过那三个点的圆。

D、E、F可以这样来求:

<span style="font-size:18px;">  if (1) {//运用行列式解线性方程组var matrix = new Matrix();  var matrixArray = new Array();  var rowArray = new Array();  var ma, mb, mc; //求过三点的圆的方程//[x1, y1], [x2, y2], [x3, y3]// ==> 方程x^2+y^2+Dx+Ey+F=0;//解D, E, Fvar point = [[0,0],[1,1],[4,2]];var x1 = point[0][0], y1 = point[0][1],x2 = point[1][0], y2 = point[1][1],x3 = point[2][0], y3 = point[2][1];//三元一次方程组[[A1,B1,C1], [A2,B2,C2], ...]var a = [[x1, y1, 1, x1*x1+y1*y1],[x2, y2, 1, x2*x2+y2*y2],[x3, y3, 1, x3*x3+y3*y3]];//三阶var rank = 3;for (var i = 0; i < rank; i++) {  matrixArray.push([a[i][0], a[i][1], a[i][2]]);  }         ma = matrix.deepCopy(matrixArray);         for (var i = 0; i < rank; i++) {  ma[i][0] = -a[i][3];  }  mb = matrix.deepCopy(matrixArray);  for (var i = 0; i < rank; i++) {  mb[i][1] = -a[i][3];  }  mc = matrix.deepCopy(matrixArray);  for (var i = 0; i < rank; i++) {  mc[i][2] = -a[i][3];  }  var d, da, db, dc;d = matrix.delta(matrixArray);  da = matrix.delta(ma);  db = matrix.delta(mb);  dc = matrix.delta(mc);  matrix.print(matrixArray);  document.write('d = ' + d+'<br/>');  matrix.print(ma);  document.write('da = ' + da+'<br/>');  matrix.print(mb);  document.write('db = '+db+'<br/>');  matrix.print(mc);  document.write('dc = '+dc+'<br/>');  var s = 'D = da/d = '+ (da/d).toFixed(2)+', E = db/d = '+(db/d).toFixed(2)+', F = dc/d = '+(dc/d).toFixed(2);  document.write(s+'<br/>');     }</span>

小伟把求DEF的过程炼制成了工具,来玩玩吧:

<span style="font-size:18px;">//求解圆的一般方程中的D、E、F三个系数
//传入的是三个点的坐标阵列
//传回[D, E, F];
function solveDEF(point) {//运用行列式解线性方程组var matrix = new Matrix();  var matrixArray = new Array();  var rowArray = new Array();  var ma, mb, mc; //求过三点的圆的方程//[x1, y1], [x2, y2], [x3, y3]// ==> 方程x^2+y^2+Dx+Ey+F=0;//解D, E, F//var point = [[0,0],[1,1],[4,2]];var x1 = point[0][0], y1 = point[0][1],x2 = point[1][0], y2 = point[1][1],x3 = point[2][0], y3 = point[2][1];//三元一次方程组[[A1,B1,C1], [A2,B2,C2], ...]var a = [[x1, y1, 1, x1*x1+y1*y1],[x2, y2, 1, x2*x2+y2*y2],[x3, y3, 1, x3*x3+y3*y3]];//三阶var rank = 3;for (var i = 0; i < rank; i++) {  matrixArray.push([a[i][0], a[i][1], a[i][2]]);  }         ma = matrix.deepCopy(matrixArray);         for (var i = 0; i < rank; i++) {  ma[i][0] = -a[i][3];  }  mb = matrix.deepCopy(matrixArray);  for (var i = 0; i < rank; i++) {  mb[i][1] = -a[i][3];  }  mc = matrix.deepCopy(matrixArray);  for (var i = 0; i < rank; i++) {  mc[i][2] = -a[i][3];  }  var d, da, db, dc;d = matrix.delta(matrixArray);  da = matrix.delta(ma);  db = matrix.delta(mb);  dc = matrix.delta(mc);  return [da/d, db/d, dc/d];/*matrix.print(matrixArray);  document.write('d = ' + d+'<br/>');  matrix.print(ma);  document.write('da = ' + da+'<br/>');  matrix.print(mb);  document.write('db = '+db+'<br/>');  matrix.print(mc);  document.write('dc = '+dc+'<br/>');  var s = 'D = da/d = '+ (da/d).toFixed(2)+', E = db/d = '+(db/d).toFixed(2)+', F = dc/d = '+(dc/d).toFixed(2);  document.write(s+'<br/>');   */
}</span>
<span style="font-size:18px;">  if (1) {var r = 20;    config.setSector(1,1,1,1);      config.graphPaper2D(0, 0, r);    config.axis2D(0, 0, 180);  var array = [[-5, -2], [5, -2], [0, 5]]; var DEF = solveDEF(array);var scale = r;var circle = generalCircle(DEF[0], DEF[1], DEF[2]);shape.strokeDraw([].concat(circle), 'blue', scale);shape.angleDraw([].concat(array), 'red', scale);}</span>

过A, B, C三个点的圆,没错吧。

再玩一局:

<span style="font-size:18px;">var array = [[-5, -2], [-7, -8], [4, 5]]; </span>

这三个点是偏安一方啊。

直线和圆的位置关系:

<span style="font-size:18px;">  if (1) {var r = 20;    config.setSector(1,1,1,1);      config.graphPaper2D(0, 0, r);    config.axis2D(0, 0, 180);  var scale = r;var circle = generalCircle(0, -2, -4);var line = generalLine(3, 1, -6);shape.strokeDraw([].concat(circle), 'blue', scale);shape.multiLineDraw([].concat(line), 'red', scale);}</span>

这两个圆的位置关系:

<span style="font-size:18px;">  if (1) {var r = 20;    config.setSector(1,1,1,1);      config.graphPaper2D(0, 0, r);    config.axis2D(0, 0, 180);  var scale = r;var circle_1 = generalCircle(2,8,-8),circle_2 = generalCircle(-4, -4,-2);shape.strokeDraw([].concat(circle_1), 'blue', scale);shape.strokeDraw([].concat(circle_2), 'red', scale);}</span>

至于交点坐标倒底是什么,就要另外去求了,

图上看好像是[-1,1] 和[3, -1],也不知对不对。

[人叫板老师]也没有给出交点坐标。

这里(1.75-1.25)/(1.75+1.25) = 1/6,而1.75+1.25又恰好是PQ距离的一半。

算了,这种规律没什么意思,直接化简得了。

<span style="font-size:18px;">//二维坐标中两点之间的距离
function distance2D(pointA, pointB) {return Math.sqrt(Math.pow(pointA[0]-pointB[0], 2)+Math.pow(pointA[1]-pointB[1], 2));
}//圆的一般方程
function generalCircle(D, E, F) {//方程x^2+y^2+Dx+Ey+F=0;var rSquare = (D*D+E*E-4*F)/4;if (rSquare > 0) {return shape.nEdge(-D/2, -E/2, Math.sqrt(rSquare), 36);}else {return [];}
}//直线的一般方程
function generalLine(A, B, C) {//方程Ax+By+C = 0;return [[-100, (-100*A+C)/(-B)], [100, (100*A+C)/(-B)]];
}//求解圆的一般方程中的D、E、F三个系数
//传入的是三个点的坐标阵列
//传回[D, E, F];
function solveDEF(point) {//运用行列式解线性方程组var matrix = new Matrix();  var matrixArray = new Array();  var rowArray = new Array();  var ma, mb, mc; //求过三点的圆的方程//[x1, y1], [x2, y2], [x3, y3]// ==> 方程x^2+y^2+Dx+Ey+F=0;//解D, E, F//var point = [[0,0],[1,1],[4,2]];var x1 = point[0][0], y1 = point[0][1],x2 = point[1][0], y2 = point[1][1],x3 = point[2][0], y3 = point[2][1];//三元一次方程组[[A1,B1,C1], [A2,B2,C2], ...]var a = [[x1, y1, 1, x1*x1+y1*y1],[x2, y2, 1, x2*x2+y2*y2],[x3, y3, 1, x3*x3+y3*y3]];//三阶var rank = 3;for (var i = 0; i < rank; i++) {  matrixArray.push([a[i][0], a[i][1], a[i][2]]);  }         ma = matrix.deepCopy(matrixArray);         for (var i = 0; i < rank; i++) {  ma[i][0] = -a[i][3];  }  mb = matrix.deepCopy(matrixArray);  for (var i = 0; i < rank; i++) {  mb[i][1] = -a[i][3];  }  mc = matrix.deepCopy(matrixArray);  for (var i = 0; i < rank; i++) {  mc[i][2] = -a[i][3];  }  var d, da, db, dc;d = matrix.delta(matrixArray);  da = matrix.delta(ma);  db = matrix.delta(mb);  dc = matrix.delta(mc);  return [da/d, db/d, dc/d];/*matrix.print(matrixArray);  document.write('d = ' + d+'<br/>');  matrix.print(ma);  document.write('da = ' + da+'<br/>');  matrix.print(mb);  document.write('db = '+db+'<br/>');  matrix.print(mc);  document.write('dc = '+dc+'<br/>');  var s = 'D = da/d = '+ (da/d).toFixed(2)+', E = db/d = '+(db/d).toFixed(2)+', F = dc/d = '+(dc/d).toFixed(2);  document.write(s+'<br/>');   */
}</span>

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

[从头学数学] 第173节 圆与方程相关推荐

  1. [从头学数学] 第208节 带着计算机去高考(序)

    剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第八转的修炼.设想一个场景: 如果允许你带一台不连网的计算机去参加高考,你会放弃选择一个手拿计算器和草稿本吗 ?阿伟决定和小伟来尝试 ...

  2. [从头学数学] 第46节 数学广角──集合

    剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入练气期第五层功法的修炼, 这次要修炼的目标是[数学广角──集合]. 正剧开始: 星历2016年01月15日 16:04:40, 银河系厄尔斯星球中华 ...

  3. [从头学数学] 第226节 [机器小伟]的元婴期修炼规划

    剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了元婴期的修炼. 正剧开始: 星历2016年05月27日 16:03:03, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一 ...

  4. [从头学数学] 第188节 千军阅尽还复来(全)

    剧情提要: [机器小伟]在[project师阿伟]的陪同下进入了[九转金丹]之第四转的修炼. 这次要研究的是[复习题]. 正剧開始: 星历2016年04月21日 15:22:06, 银河系厄尔斯星球中 ...

  5. [从头学数学] 第167节 集合与函数概念

    剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了结丹初期的修炼, 这次要修炼的目标是[集合与函数概念]. 正剧开始: 星历2016年04月08日 11:41:49, 银河系厄尔斯星球中华帝国江南 ...

  6. [从头学数学] 第180节 解三角形

    剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了结丹后期的修炼, 这次要修炼的目标是[解三角形]. 正剧开始: 话说[机器小伟]自从进入结丹期以来,短短数日,就硬是从结丹初期修炼到了后期,这种 ...

  7. [从头学数学] 第203节 坐标系与参数方程

    剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第七转的修炼. 这次要研究的是[坐标系与参数方程]. 正剧开始: 星历2016年05月03日 13:18:47, 银河系厄尔斯星球中 ...

  8. [从头学数学] 第189节 常用逻辑用语

    剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第五转的修炼. 这次要研究的是[常用逻辑用语]. 正剧开始: 星历2016年04月22日 09:18:39, 银河系厄尔斯星球中华帝 ...

  9. [从头学数学] 第191节 空间向量与立体几何

    剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第五转的修炼. 这次要研究的是[空间向量与立体几何]. 正剧开始: 星历2016年04月23日 11:00:22, 银河系厄尔斯星球 ...

最新文章

  1. js 地址的封装以及地址栏的参数获取
  2. php sql 二次注入,espcms 二次注入一枚
  3. 13号线ab线规划图_大连地铁2050路线规划图
  4. supervisord的安装使用
  5. 互联网架构设计漫谈 (1)-概述
  6. AndroidStudio安卓原生开发_UI控件介绍---Android原生开发工作笔记96
  7. YTU 3003: 括号匹配(栈和队列)
  8. Android Studio Gradle 缓存文件夹设置
  9. ulipad.4.1.zip linux,在ubuntu中安装ulipad
  10. C语言 从入门到放弃
  11. 欧美古风格html网站模板
  12. Money is not everthing
  13. java去掉边框_java swing怎么去掉边框
  14. hana数据库导入mysql_在SAP HANA Express Edition里创建数据库表
  15. 推荐几款极简的手机浏览器
  16. 7-20 打印九九口诀表(分数 15)
  17. 实测超轻量中文OCR开源项目,总模型仅17M
  18. chrome浏览器安装右键翻译插件
  19. 关于在word中插入页码以及目录的操作
  20. Maven的安装配置及IDEA配置(图文教程)

热门文章

  1. CMake I 使用Boost库filesystem
  2. 关于stringWithFormat:
  3. apache 下载apk出错
  4. 三分钟告诉你游戏配音软件有哪些
  5. 闲云旅游项目开发-(第二篇:实现登录功能,使用vuex的store管理数据)
  6. pclexpress是什么主板_什么是PCI插槽 主板知识 ZOL术语
  7. 信息收集之其他信息收集
  8. ABC200 C - Ringo‘s Favorite Numbers 2(map计数)
  9. ps aux stat状态解释
  10. Attempt to invoke virtual method ‘boolean FingerprintManager.isHardwareDetected()‘ on a null objec