- 將電子書分為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);
}
}