每天學一點flash(52) 翻頁組件演算法(2)

來源:互聯網
上載者:User
  • 將電子書分為3個內容層,疊放順序。第一層為當前頁面層,是現在正在顯示的頁面;第二層是隨滑鼠拖拽時捲起的頁角,第三層是當頁角捲起時,露出下一頁的層。
  • 設定遮罩:當頁邊捲起時,層1僅顯示四邊形FBDE內部分,層2僅顯示ABCD部分,層3僅顯示BGHD部分。
  • 旋轉:層2內的內容要隨著滑鼠運動而不停變換傾斜角度,其角度始終與AC邊斜度一致。
  • 翻頁:當頁面完全翻過時,層1的當前頁數=當前頁數+1

 

程式的核心在於如何獲得四個點ABCD的座標,我使用的是求垂直平分線的方法,既:點C是滑鼠位置,點H是頁角位置,BD既為此兩點間的垂直平分線。由已知的C,H座標求出直線BD的一次函數y=kx+b以後再求出其與FG,EH的切點,既得點B,D座標,點A是點G於直線BD的對稱點,通過求點G對BD的對稱點既可得點A座標

這裡是來源於網上。

下面經過一個下午的瞭解,寫了一個角的演算法。這裡只是擷取了四個點的座標,x1,y1為右下面的座標,x4,y4為右上面的點

座標,k為斜率,t為垂直平分線的 斜率,其他的上的一樣,當中的是計算出的結果,特別是兩個交點的位置,B和D,還有A 利用求對稱點的方法來求,需要運用到很多平面幾何的知識。

 

var x1:Number = 912;
var y1:Number = 684;

var x4:Number = 912;
var y4:Number = 84;

onEnterFrame = init;

function init():Void {
 clear();
 var X:Number = _root._xmouse;
 var Y:Number = _root._ymouse;
 var k:Number = (Y-y1)/(X-x1);
 var t:Number = -1/k;
 var x0:Number = (X+x1)/2;
 var y0:Number = (Y+y1)/2;
 var BposX:Number = (t*x0-y0)/t;
 var BposY:Number = y4;
 var DposX:Number = (y1+t*x0-y0)/t;
 var DposY:Number = y1;

 var AposY:Number =( -k*x4+2*k*x0+2*k*k*y0-k*k*y4+y4-k*x4)/(1+k*k);
 var AposX:Number = (AposY-y4+x4*k)/k;

 var XposA:Number = x1;
 var YposA:Number = XposA*t-t*x0+y0;

 lineStyle(2,0xFF00FF,100);
 if (YposA>84) {
  moveTo(X,Y);
  lineTo(DposX,DposY);
  lineTo(XposA,YposA);
  lineTo(X,Y);
 } else {
  moveTo(X,Y);
  lineTo(DposX,DposY);
  lineTo(BposX,BposY);
  lineTo(AposX,AposY);
  lineTo(X,Y);
 }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.