博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java贝塞尔曲线翻页效果
阅读量:6915 次
发布时间:2019-06-27

本文共 5042 字,大约阅读时间需要 16 分钟。

我写了一个java版本的实现,在android当中效果也实现了。是一样的,你可以把代码当中提示点和辅助线的都打开,我在源码中都注释掉了 public void DrawBezier(int x[],int y[],int n,Graphics g){                int i,j;                double t;                //暂时存储传入的参数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
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); } /** * 模拟翻页函数 * @param PointX触摸点X * @param PointY触摸点Y * @param endX终止点,一般为书页的右下角X * @param endY终止点Y * @param graphics 绘图的graphics */ public void Turn(int PointX , int PointY ,int endX ,int endY,Graphics graphics){ Point a = new Point(PointX, PointY); Point f = new Point(endX,endY); Point g = new Point((a.x+f.x)/2,(a.y+f.y)/2); Point e = new Point(); Point h = new Point(); 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 = new Point(); Point j = new Point(); 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 = new Point(); key2 = new Point(); 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); } public Point MidPoint(Point p1,Point p2){ return new Point((p1.x+p2.x)/2,(p1.y+p2.y)/2); } static class Line{ public double K; public double B; public static Line getLine(Point p1,Point p2) { Line tLine = new Line(); tLine.K = (p1.y-p2.y)/(p1.x-p2.x); tLine.B = p1.y-tLine.K*p1.x; return tLine; } }

 

转载于:https://www.cnblogs.com/greywolf/archive/2012/12/22/2829254.html

你可能感兴趣的文章
单片机不同晶振怎么计算延迟时间?
查看>>
第 15 章 Div+CSS页面设计
查看>>
龙珠激斗大冒险掷筛子算法
查看>>
第 46 章 Regular expression (正则表达式)
查看>>
入坑IT都快十年了
查看>>
【spring Boot】spring boot获取资源文件的三种方式【两种情况下】
查看>>
(转) 机器学习很有趣Part6:怎样使用深度学习进行语音识别
查看>>
ASP.NET遇到HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容
查看>>
Android Gradle 自定义Task 详解
查看>>
数据结构之树、森林和二叉树的转换
查看>>
svn服务器配置以及自动同步到web服务器
查看>>
【CSS进阶】伪元素的妙用2 - 多列均匀布局及title属性效果
查看>>
【VS2013】设定Nuget代理
查看>>
php xls 导出乱码解决方案
查看>>
SwipeBackActivity 的使用
查看>>
逻辑卷、物理卷、卷组 的关系
查看>>
tkinter 弹出窗口 传值回到 主窗口
查看>>
百度面试
查看>>
1211Bug with integer literals in PLSQL
查看>>
Linux 权限管理之目录权限限制
查看>>