日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[从头学数学] 第173节 圆与方程

發布時間:2024/1/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [从头学数学] 第173节 圆与方程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
劇情提要:
[機器小偉]在[工程師阿偉]的陪同下進入了結丹初期的修煉,
這次要修煉的目標是[圓與方程]。

正劇開始:

星歷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节 圆与方程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。