java 贝塞尔_java贝塞尔曲线翻页效果
我写了一个java版本的实现,在android当中效果也实现了。是一样的,你可以把代码当中提示点和辅助线的都打开,我在源码中都注释掉了
public void DrawBezier(int x[],int y[],intn,Graphics g){inti,j;doublet;//暂时存储传入的参数X和Y数组
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);
}/*** 模拟翻页函数
*@paramPointX触摸点X
*@paramPointY触摸点Y
*@paramendX终止点,一般为书页的右下角X
*@paramendY终止点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;
}
}
java 贝塞尔_java贝塞尔曲线翻页效果相关推荐
- Java电子书平滑翻页效果_移动端页面平滑翻页的解决方案
随着近几年移动营销页的火爆,催生了一个中国式的名词「H5」.而 H5 最常见的形态就是类似幻灯片翻页效果. 我们需要制作 H5 的时候,最快的办法就是使用一些滑动插件库,如 iDangero.us 出 ...
- linux+手机+翻页,在Android手机上实现阅读器的翻页效果
本篇文章来谈谈怎么使用java实现翻页效果,就像电子阅读器那样. 现在先来看看翻页的原理图: 先了解各个字母表示的含义: A-把书页翻起来后看到的背面区域 B-把书页翻起来后看到的下一页的一角 C-当 ...
- android 阅读器自动滚动,在Android手机上实现阅读器翻页效果.doc
在Android手机上实现阅读器翻页效果 先了解各个字母表示的含义:A-把书页翻起来后看到的背面区域B-把书页翻起来后看到的下一页的一角C-当前页的可见部分.a-手指滑动页角到达的位置b-当前页翻起来 ...
- android 电子书源码,翻页效果
这两天模仿着做了一个apk电子书的应用,有翻页效果,本来是想学一下自己写的,无奈,最后偷懒使用了别人写的 翻页类 PageWidget.java 下面是工程文件的结构 这个是写的类的包结构,PageV ...
- 用Cocos Creator 模拟书本翻页效果
1.简介 本文主要探讨了如何使用CocosCreator来模拟书本翻页效果,分别介绍了通过使用贝塞尔曲线和verlet积分算法来模拟书页底边在翻页过程中的弯曲形变,最后通过自定义assembler传入 ...
- 用 Cocos Creator 模拟书本翻页效果
本篇文章作者:乐府-贝塔 乐府-贝塔:乐府前端核心开发,从事游戏开发多年,从 Cocos2d-x 做到 Cocos Creator,擅长渲染技术的相关优化.多年的前端开发经验激发了对技术研究的深厚兴趣 ...
- Android翻页效果原理实现之翻页的尝试
炮兵镇楼 在<自定义控件其实很简单>系列的前半部分中我们用了整整六节近两万字两百多张配图讲了Android图形的绘制,虽然篇幅很巨大但仍然只是图形绘制的冰山一角,旨在领大家入门,至于修行成 ...
- 教你仿写 Flipboard 的翻页效果
前言 自从清明放假之后,状态就一直一般般,(放假使我快乐,不要上学,我要放假!)导致更文也断了一段时间,鸽了好一段时间.痛定思痛,最近决定重新恢复更文.鉴于前段时间在学习扔物线大大 HenCoder ...
- flipboard的翻页效果的实现
最近看到flipboard的翻页效果很不错,就想着把他给实现,整个效果做的差不多了,还有一些细节要完善,现在放上来.我学android全靠自学的,而且的代码的质量也难保证,还希望各位大神批评指正那. ...
最新文章
- android 循环平移动画
- 网页中PNG透明背景图片的完美应用
- 界面-工作者线程结构之:异步委托调用
- 814. Binary Tree Pruning
- Fabio技术手册(2):部署
- python题目及解析_python知识点总结以及15道题的解析
- flutter天气_牛笔!自己用Flutter撸一个天气APP
- Silverlight 中文教程第四部分:使用 Style 元素更好地封装观感 (木野狐译)
- 书单丨724运维日,为运维人干杯
- Java Tomcat SSL 服务端/客户端双向认证
- 没有tools.jar包的解决办法
- FISCO BCOS Failed to connect to nodes: [ ssl hanshake failed:/192.168.64.131:20200]
- Android端直播系统开发入门
- swfobject2.2
- 谈刺蛇c语言程序,C语言程设计实验内容与答案.doc
- 基于PG与PostGIS搭建实时矢量瓦片服务
- SCR-MCR:正则项, OGB榜单--清华唐杰-- 可扩展图学习
- 微信翻译,快把上海老外搞疯了
- Java后台微信点餐小程序开发最新版笔记,Springboot+Mysql+Freemarker+Bootstrap+微信小程序实现扫码点餐小程序,包含语音提示,微信消息推送,网页管理后台
- 跟锦数学2017年02月
热门文章
- [jQuery]10 Things I Learned from the jQuery Source
- 软件项目开发应写的13类文档
- matlab调用c++生成dll32位与64位对应关系
- FFmpeg使用基础
- 最简单的基于FFmpeg的AVfilter的例子-修正版
- Windows下使用静态库
- python messagebox输出_python 3.4 中原来的tkinter组件的tkMessageBox变成啥了?
- boost signals2 coroutine
- linux to extract contents between patterns
- IPv6系列(一)—快速入门