[從頭學數學] 第191節 空間向量與立體幾何

來源:互聯網
上載者:User

標籤:

劇情提要:
[機器小偉]在[工程師阿偉]的陪同下進入了[九轉金丹]之第五轉的修鍊。
這次要研究的是[空間向量與立體幾何]。

正劇開始:

星曆2016年04月23日 11:00:22, 銀河系厄爾斯星球中華帝國江南行省。
[工程師阿偉]正在和[機器小偉]一起研究[空間向量與立體幾何]。

















<span style="font-size:18px;">#例5def dot(a, b):    if (len(a) >= 3):        return a[0]*b[0] +a[1]*b[1]+a[2]*b[2];    elif (len(a) >= 2):        return a[0]*b[0] +a[1]*b[1];    else:        return a*b;#向量的絕對值def rAbs(a):    if (len(a) >= 3):        return math.sqrt(a[0]**2 +a[1]**2 + a[2]**2);    elif (len(a) >= 2):        return math.sqrt(a[0]**2 +a[1]**2);    else:        return a;def angle(a, b):    return math.acos(dot(a,b)/(rAbs(a)*rAbs(b)))*180/math.pi;    def tmp():    a = [0,-0.25,1];    b = [0, 0.25, 1];    print(angle(a, b));</span>

<span style="font-size:18px;">#例6>>> 90.0def tmp():    a = [-0.5, -0.5, 0.5];    b = [1, 0, 1];    print(angle(a, b));</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,190);                                  //座標軸設定              var scaleX = 2*r, scaleY = 2*r;                var spaceX = 2, spaceY = 2;                 var xS = -10, xE = 10;                var yS = -10, yE = 10;                config.axisSpacing(xS, xE, spaceX, scaleX, 'X');                  config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');                                             var array = [[1, 2], [4, 5], [7,2], [-8, -5], [-5, 3], [-8, 3], [-8, 5], [-2, 5], [-2, -1], [7, -3], [3, 1]];              var size = array.length;                          var transform = new Transform();            var tmp = [];                        array = transform.scale(transform.translate(array, 0, 0), scaleX/spaceX, scaleY/spaceY);                          tmp = [].concat(array);          vectorDraw(tmp, 'red');                    tmp = [].concat(array);                  shape.pointDraw(tmp, 'orange', 1, 1);                   plot.setFillStyle('blue');          plot.fillText('向量圖', -270, -170, 300);              }</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,190);                                  //座標軸設定              var scaleX = 4*r, scaleY = 4*r;                var spaceX = 2, spaceY = 2;                 var xS = -10, xE = 10;                var yS = -10, yE = 10;                config.axisSpacing(xS, xE, spaceX, scaleX, 'X');                  config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');                                             var array = [];for (var x = -2; x <= 2; x+=4) {for (var y = -2; y <= 2; y+=4) {for (var z = -2; z<=2; z+=4) {array.push([x,y,z]);}}}    array = shape.xyzSort(array);        var size = array.length;  var array2D = [];for (var i = 0; i < size; i++) {array2D.push(shape.point3D(array[i][0], array[i][1], array[i][2]));}                        var transform = new Transform();            var tmp = [];                        array2D = transform.scale(transform.translate(array2D, 0, 0), scaleX/spaceX, scaleY/spaceY);                          tmp = [].concat(array2D);          vectorDraw(tmp, 'red');                    tmp = [].concat(array2D);                  shape.pointDraw(tmp, 'orange', 1, 1);                   plot.setFillStyle('blue');          plot.fillText('向量圖', -270, -170, 300);              }</span>









<span style="font-size:18px;">//點陣中任意兩點的距離排序集function distanceSort(pointArray) {//傳入點陣列pointArray//格式為[[px1, py1], [px2, py2], ...]//document.write(pointArray.join(' , ')+'<br/>');//對於pointArray中的每個點,求它與所有其它點的距離//結果放入distanceArray//格式為[[點1序號,點2序號, 距離值]]var distanceArray = [];//點的數量var size = pointArray.length;//臨時變數var distance = x1 = y1 = z1 = x2 = y2 = z2 = 0;var dimension = pointArray[0].length;//計算並壓入距離for (var i = 0; i < size; i++) {for (var j = i+1; j < size; j++) {x1 = pointArray[i][0];y1 = pointArray[i][1];x2 = pointArray[j][0];y2 = pointArray[j][1];if (dimension > 2) {//三維點的處理z1 = pointArray[i][2];z2 = pointArray[j][2];distance = Math.sqrt(Math.pow(x1-x2, 2)+Math.pow(y1-y2, 2)+Math.pow(z1-z2, 2));}else {distance = Math.sqrt(Math.pow(x1-x2, 2)+Math.pow(y1-y2, 2));}//注意這裡已經保證i < j//所以起始點序號必須要小於終點序號//這是為了串連起始點和終點的直線不會重複distanceArray.push([i, j, distance]);}}//對距離陣列排序//排序權重:起始點序號 >  距離 > 終點序號 distanceArray.sort(function(a, b) {if (a[0] == b[0]) {if (Math.abs(a[2] - b[2]) < 0.000001) {return a[1]-b[1];}else {return a[2]-b[2];}}else {return a[0] - b[0];}});//document.write(distanceArray.join(' , ')+'<br/>');return distanceArray;}if (1) {var r = 20;                  config.setSector(1,1,1,1);                    config.graphPaper2D(0, 0, r);                  config.axis2D(0, 0,190);                                  //座標軸設定              var scaleX = 4*r, scaleY = 4*r;                var spaceX = 2, spaceY = 2;                 var xS = -10, xE = 10;                var yS = -10, yE = 10;                config.axisSpacing(xS, xE, spaceX, scaleX, 'X');                  config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');                                             var array = [];for (var x = -2; x <= 2; x+=4) {for (var y = -2; y <= 2; y+=4) {for (var z = -2; z<=2; z+=4) {array.push([x,y,z]);}}}    //array = shape.xyzSort(array);        var size = array.length;  var array2D = [];for (var i = 0; i < size; i++) {array2D.push(shape.point3D(array[i][0], array[i][1], array[i][2]));}        //去除重複點          var pointArray = removeDuplicatedPoint(array2D);          //無重複的點的數量          var points = pointArray.length;                    //得到距離陣列          //格式為[[點1序號,點2序號, 距離值], ...]          var distanceArray = distanceSort(pointArray);          //邊的數量          var edges = distanceArray.length;                    //存放需要連通的邊          var linkedArray = [];          //連通的邊的數量          var links = 0;                    //每個頂點相關的邊的集合          var edgeOfVertex = [];                    for (var i = 0; i < points; i++) {                                          //獲得頂點相關的邊的集合              edgeOfVertex = [];              for (var j = 0; j < edges; j++) {                  if (distanceArray[j][0] == i ||                      distanceArray[j][1] == i) {                      edgeOfVertex.push(distanceArray[j]);                  }              }                            //根據起始點尋找最短長度的兩條邊              edgeOfVertex.sort(function(a, b) {                  return a[2] - b[2];              });                            var choice = 2;              if (edgeOfVertex.length > choice) {                  edgeOfVertex = edgeOfVertex.slice(0, choice);              }                            linkedArray = linkedArray.concat(edgeOfVertex);          }                              //document.write(linkedArray.join(' , ')+'<br/>');          linkedArray = removeDuplicatedPoint(linkedArray);          links = linkedArray.length;                    //document.write(linkedArray.join(' , ')+'<br/>');                        var startPoint, endPoint, x1, y1, x2, y2;          //比例縮放          var scale = 40;                    for (var i = 0; i < links; i++) {              startPoint = linkedArray[i][0];              endPoint = linkedArray[i][1];              x1 = pointArray[startPoint][0];              y1 = pointArray[startPoint][1];              x2 = pointArray[endPoint][0];              y2 = pointArray[endPoint][1];                            shape.vectorDraw([[x1,y1], [x2, y2]], 'red', scale);          }  shape.pointDraw(pointArray, 'blue', scale, 1);        /*      //array2D = shape.angularSort(array2D);        var transform = new Transform();            var tmp = [];                        array2D = transform.scale(transform.translate(array2D, 0, 0), scaleX/spaceX, scaleY/spaceY);                          tmp = [].concat(array2D);          vectorDraw(tmp, 'red');                    tmp = [].concat(array2D);                  shape.pointDraw(tmp, 'orange', 1, 1);       */          plot.setFillStyle('blue');          plot.fillText('向量圖', -270, -170, 300);              }</span>


<span style="font-size:18px;">array = [[0,0,0],  [0, 0, 5], [5,0,5], [0, 5, 0], [0, 5, 5]];</span>



<span style="font-size:18px;">array = [[0,0,0],  [0, 0, 5], [5,0,0], [0, 5, 0]];</span>


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


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

本節到此結束,欲知後事如何,請看下回分解。



[從頭學數學] 第191節 空間向量與立體幾何

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.