萬盛學電腦網

 萬盛學電腦網 >> 圖文處理 >> Flash教程 >> Flash教程:用AS3代碼表現傾斜角與斜率

Flash教程:用AS3代碼表現傾斜角與斜率

   演示:

  坐標中的兩點可以確定一條直線,直線與線段不同,線段有長度,而直線是沒有長度的。通過兩點可以確定一條直線,通過角度和一個定點也能確定一條直線。

  直線與X軸正半軸所成的角稱直線的傾斜角,當傾斜角不等於90度時,傾斜角的正切稱為直線的斜率。圖:

Flash教程:用AS3代碼表現傾斜角與斜率  三聯

  其中角a就是直線的傾斜角,而斜率就是直角三角中對邊BC與鄰邊AB的比值,即正切值。正切值通過Math類的tan()方法可以得到。

  給定A點和C點的坐標,可求得角a的角度值。

  求角a的正切值的算法:

  (C.y - A.y) / (C.x - A.x);

  下面的代碼求直線的斜率:

  (C.x == A.x)?Infinity:(C.y - A.y) / (C.x - A.x);

  代碼先判斷兩點的橫坐標是否相等,如果相等,說明直線垂直於x軸,這時不存在斜率,所以給斜率一定特殊值Infinity。

  例:

  1、新建Flash文檔,取名存盤。

  2、創建影片剪輯,圖層1用橢圓工具繪制一個圓,填充色和大小根據需要定。插入圖層2, as層,輸入代碼:

  //注冊鼠標按下事件偵聽器

  this.addEventListener(MouseEvent.MOUSE_DOWN,startDragFunc);

  //注冊鼠標釋放事件偵聽器

  this.addEventListener(MouseEvent.MOUSE_UP,stopDragFunc);

  //定義接收按下事件的函數

  function startDragFunc(e:MouseEvent);

  {

  //開始拖動

  e.target.startDrag();

  //更新顯示

  e.updateAfterEvent() ;

  }

  //定義接收釋放事件的函數

  function stopDragFunc(e:MouseEvent);

  {

  //停止拖動

  e.target.stopDrag()

  }

  3、返回場景1,在圖層1的第一幀拖入兩個影片剪輯,在屬性面板中輸入剪輯的名字,p1 、p2。

  4、插入圖層2,選擇文本工具,創建靜態文本,字體大小15 、字體自定。輸入:斜率:在右面創建動態文本,名:k_txt。在下面再次創建靜態文本,輸入:傾斜角:右面創建動態文本,名:a_txt。

  5、插入圖層3,as層。輸入代碼:

  //導入數學函數

  include "Math2.as";

  //創建兩個點

  var A:Point=new Point()

  var B:Point=new Point()

  //創建用於繪制箭頭的容器

  var arrow_shape:Shape=new Shape();

  this.addChild(arrow_shape);

  stage.addEventListener(Event.ENTER_FRAME,loop);

  function loop(e:Event):void

  {

  //清除繪圖

  arrow_shape.graphics.clear();

  //在兩點間繪制箭頭

  drawArrow(arrow_shape.graphics,p1.x,p1.y,p2.x,p2.y);

  //設置點A的值

  A.x=p1.x;

  A.y=p1.y;

  //設置點B的值

  B.x=p2.x;

  B.y=p2.y;

  //根據點A和點B創建直線

  var line:Line=new Line(A,B);

  //把斜率保存兩位小數,並轉換為字符串顯示出來

  k_txt.text=line.K.toFixed(2);

  //把傾斜角取整後顯示

  a_txt.text=line.angle.toFixed();

  }

  上面的代碼把弧度和角度轉換等函數放在Math2.as文件中,通過include導入Math2.as文件就可以使用這些數學函數。Math2.as文件中添加了繪制箭頭的函數drawArraw()。

  5、測試影片,看一下效果。如果需要輸出p2的x、y坐標添加代碼:

  x_txt.text = p2.x;

  y_txt.text = p2.y;

  界面上添加靜態文本和動態文本就不用細說了吧,如果不需要顯示斜率注釋掉。

copyright © 萬盛學電腦網 all rights reserved