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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 贝塞尔_java贝塞尔曲线翻页效果

發(fā)布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 贝塞尔_java贝塞尔曲线翻页效果 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我寫了一個java版本的實(shí)現(xiàn),在android當(dāng)中效果也實(shí)現(xiàn)了。是一樣的,你可以把代碼當(dāng)中提示點(diǎn)和輔助線的都打開,我在源碼中都注釋掉了

public void DrawBezier(int x[],int y[],intn,Graphics g){inti,j;doublet;//暫時存儲傳入的參數(shù)X和Y數(shù)組

double dx[] = new double[100];double dy[] = new double[100];double px[] = new double[100];double py[] = new double[100];for(i=0;i

{

px[i]=x[i];

py[i]=y[i];

}for(i=0;i<100;i++)

{

dx[i]= 0;

dy[i]= 0;

}for(i=0;i<100;i++)

{

t= (double)(((double)(i-1))/100);for(j=0;j

{

dx[i]+=Math.pow(1-t,n-1-j)*Math.pow(t,j)*C(n-1,n-1-j)*px[j];

dy[i]+=Math.pow(1-t,n-1-j)*Math.pow(t,j)*C(n-1,n-1-j)*py[j];

}

}int drawX[] = new int[100];int drawY[] = new int[100];

drawX[0] = (int) dx[0];

drawY[0] = (int) dy[0];for(i=1;i<100;i++){

drawX[i]= (int) dx[i];

drawY[i]= (int) dy[i];

g.drawLine(drawX[i-1],drawY[i-1], drawX[i],drawY[i]);

}

g.drawPolyline(drawX, drawY, n);

}public double C(int a,intb){inti,temp;int s1 = 1,s2 = 1,s3 = 1;if(a

{

i=a;

a=b;

b=i;

}

temp=b;while(temp>0)

{

s1*=temp;

temp--;

}

temp=a;while(temp>0)

{

s2*=temp;

temp--;

}

temp= a-b;while(temp>0)

{

s3*=temp;

temp--;

}return s2/(s1*s3);

}/*** 模擬翻頁函數(shù)

*@paramPointX觸摸點(diǎn)X

*@paramPointY觸摸點(diǎn)Y

*@paramendX終止點(diǎn),一般為書頁的右下角X

*@paramendY終止點(diǎn)Y

*@paramgraphics 繪圖的graphics*/

public void Turn(int PointX , int PointY ,int endX ,intendY,Graphics graphics){

Point a= newPoint(PointX, PointY);

Point f= newPoint(endX,endY);

Point g= new Point((a.x+f.x)/2,(a.y+f.y)/2);

Point e= newPoint();

Point h= newPoint();

h.x=f.x;

e.y=f.y;double kBar = -1.0/((double)(f.y-g.y)/(double)(f.x-g.x));double q = g.y-kBar*g.x;

h.y= (int) (h.x*kBar+q);

e.x= (int) ((e.y-q)/kBar);

Point m= new Point((a.x+e.x)/2,(a.y+e.y)/2);

Point n= new Point((a.x+h.x)/2,(a.y+h.y)/2);

kBar= (double)(m.y-n.y)/(double)(m.x-n.x);

q= m.y-kBar*m.x;

Point i= newPoint();

Point j= newPoint();

i.x=f.x;

j.y=f.y;

i.y= (int) (kBar*i.x+q);

j.x= (int) ((f.y-q)/kBar);

Point key1,key2;

key1= newPoint();

key2= newPoint();

key1=MidPoint(MidPoint(j, m), e);

key2=MidPoint(MidPoint(n, i), h);int x[] = new int[3];int y[] = new int[3];

x[0] = j.x;x[1] = e.x;x[2] =m.x;

y[0] = j.y;y[1] = e.y;y[2] =m.y;

DrawBezier(x, y,3, graphics);

x[0] = i.x;x[1] = h.x;x[2] =n.x;

y[0] = i.y;y[1] = h.y;y[2] =n.y;

DrawBezier(x, y,3, graphics);

graphics.drawLine(m.x, m.y, a.x, a.y);

graphics.drawLine(n.x, n.y, a.x, a.y);

graphics.drawLine(key1.x, key1.y, key2.x, key2.y);

String statString= "a: "+a.x+" "+a.y+"\n"+

"f: "+f.x+" "+f.y+"\n"+

"n: "+n.x+" "+n.y+"\n"+

"m: "+m.x+" "+m.y+"\n"+

"key1: "+key1.x+" "+key1.y+"\n"+

"key2: "+key2.x+" "+key2.y

;

graphics.drawString(statString,40, 40);

graphics.drawString("a", a.x, a.y);

graphics.drawString("f", f.x, f.y);

graphics.drawString("key1", key1.x, key1.y);

graphics.drawString("key2", key2.x, key2.y);

graphics.drawString("m", m.x, m.y);

graphics.drawString("n", n.x, n.y);

graphics.drawString("g", g.x, g.y);

graphics.drawString("e", e.x, e.y);

graphics.drawString("i", i.x, i.y);

graphics.drawString("j", j.x, j.y);

graphics.drawLine(a.x, a.y, f.x, f.y);

graphics.drawLine(m.x, m.y, n.x, n.y);

graphics.drawLine(e.x, e.y, h.x, h.y);

graphics.drawLine(i.x, i.y, j.x, j.y);

}publicPoint MidPoint(Point p1,Point p2){return new Point((p1.x+p2.x)/2,(p1.y+p2.y)/2);

}static classLine{public doubleK;public doubleB;public staticLine getLine(Point p1,Point p2) {

Line tLine= newLine();

tLine.K= (p1.y-p2.y)/(p1.x-p2.x);

tLine.B= p1.y-tLine.K*p1.x;returntLine;

}

}

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的java 贝塞尔_java贝塞尔曲线翻页效果的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。