贝塞尔曲线java实现
主类:BezierFrame
- package bezierT;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.EventQueue;
- import java.awt.FlowLayout;
- import javax.swing.JButton;
- import javax.swing.JDialog;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.UIManager;
- import javax.swing.border.LineBorder;
- public class BezierFrame extends JFrame
- {
- public static void main(String[] args)
- {
- EventQueue.invokeLater(new Runnable()
- {
- public void run()
- {
- JFrame frame = new JFrame();
- frame.setTitle("BezierTest");
- frame.setSize(264,360);
- BezierPanel bezier = new BezierPanel();
- bezier.setBorder(new LineBorder(Color.black));
- bezier.setPreferredSize(new Dimension(254, 254));
- frame.add(bezier);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setVisible(true);
- }
- });
- }
- }
实现类:BezierPanel
- package bezierT;
- import javax.swing.*;
- import java.awt.*;
- import java.awt.geom.*;
- import java.awt.event.*;
- import java.util.ArrayList;
- import java.util.Random;
- class BezierPanel extends JComponent
- {
- private static int SIZE = 8;
- private int current;
- private Point2D[] points;
- public BezierPanel()
- {
- Point2D p1= new Point2D.Double(64,190);
- Point2D p2= new Point2D.Double(64,150);
- Point2D p3= new Point2D.Double(64,104);
- Point2D p4= new Point2D.Double(64, 64);
- points = new Point2D[]{p1,p2,p3,p4};
- addMouseListener(new MouseAdapter()
- {
- public void mousePressed(MouseEvent event)
- {
- Point2D p =event.getPoint();
- for(int i = 0; i < points.length; i++)
- {
- double x = points[i].getX() - SIZE/2;
- double y = points[i].getY() - SIZE/2;
- Rectangle2D r = new Rectangle2D.Double(x, y, SIZE, SIZE);
- if(r.contains(p))
- {
- current = i;
- break;
- }
- }
- }
- public void mouseReleased(MouseEvent event)
- {
- current = -1;
- }
- });
- addMouseMotionListener(new MouseMotionAdapter()
- {
- public void mouseDragged(MouseEvent event)
- {
- if (current == -1 ) {
- return;
- }
- if(current != -1)
- points[current] = event.getPoint();
- repaint();
- }
- });
- current = -1;
- }
- public Point2D cubicBezier(double t, Point2D[] p)
- {
- Point2D[] temp = new Point2D[p.length];
- for(int k=0; k < p.length; k++)
- temp[k]=p[k];
- for(int i=0; i< 3; i++)
- {
- for(int j = 0; j < 4-i-1 ; j++)
- {
- double x = (1-t)*temp[j].getX() + t*temp[j+1].getX();
- double y = (1-t)*temp[j].getY()+ t*temp[j+1].getY();
- temp[j] = new Point2D.Double(x,y);
- }
- }
- return temp[0];
- }
- public void drawBezier(Graphics g, Point2D[] p)
- {
- for(double t = 0; t < 1; t+=0.002)
- {
- Point2D p1= cubicBezier(t,p);
- Point2D p2 = cubicBezier(t+0.001,p);
- g.drawLine((int)Math.round(p1.getX()),(int)Math.round(p1.getY()),(int)Math.round(p2.getX()),(int)Math.round(p2.getY()));
- }
- }
- public void paintComponent(Graphics g)
- {
- if(points == null) return;
- Graphics2D g2 = (Graphics2D) g;
- for(int i = 0; i < points.length; i++)
- {
- double x = points[i].getX() - SIZE/2;
- double y = points[i].getY() - SIZE/2;
- g2.drawString(String.valueOf(i+1), (float)(x+SIZE), (float)(y+SIZE));
- g2.fill(new Rectangle2D.Double(x, y, SIZE, SIZE));
- }
- drawBezier(g,points);
- }
- }
贝塞尔曲线java实现的更多相关文章
- Android 贝塞尔曲线 折线图
1.贝塞尔曲线:http://baike.baidu.com/view/60154.htm,在这里理解什么是贝塞尔曲线 2.直接上图: 3.100多行代码就可以画出贝塞尔曲线,直接上代码 packag ...
- 贝塞尔曲线:原理、自定义贝塞尔曲线View、使用!!!
一.原理 转自:http://www.2cto.com/kf/201401/275838.html Android动画学习Demo(3) 沿着贝塞尔曲线移动的Property Animation Pr ...
- Android中贝塞尔曲线的绘制方法
贝塞尔曲线,很多人可能不太了解,什么叫做贝塞尔曲线呢?这里先做一下简单介绍:贝塞尔曲线也可以叫做贝济埃曲线或者贝兹曲线,它由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋.一般的矢量图形软件常 ...
- Android - Animation 贝塞尔曲线之美
概述 贝塞尔曲线于1962,由法国工程师皮埃尔·贝塞尔所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计.贝塞尔曲线最初由Paul de Casteljau于1959年运用de Casteljau演算 ...
- JS模拟CSS3动画-贝塞尔曲线
一.什么是贝塞尔曲线 1962年,法国工程师皮埃尔·贝塞尔(Pierre Bézier),贝塞尔曲线来为为解决汽车的主体的设计问题而发明了贝塞尔曲线.如今,贝赛尔曲线是计算机图形学中相当重要的一种曲线 ...
- 关于曲线 规划 算法 线性 S曲线 贝塞尔曲线
工控领域经常会涉及速度加减速的算法:线性加减速,S曲线加减速(sin函数,拓展其他三角函数曲线), 贝塞尔曲线,等等. 线性加减速: 设定起始速度V0,目标速度V1,加速时间Ta(s,或加速度) ...
- canvas贝塞尔曲线
贝塞尔曲线 Bézier curve(贝塞尔曲线)是应用于二维图形应用程序的数学曲线. 曲线定义:起始点.终止点.控制点.通过调整控制点,贝塞尔曲线的形状会发生变化. 1962年,法国数学家Pierr ...
- 贝塞尔曲线(UIBezierPath)属性、方法汇总
UIBezierPath主要用来绘制矢量图形,它是基于Core Graphics对CGPathRef数据类型和path绘图属性的一个封装,所以是需要图形上下文的(CGContextRef),所以一般U ...
- 深度掌握SVG路径path的贝塞尔曲线指令
一.数字.公式.函数.变量,哦,NO! 又又一次说起贝塞尔曲线(英语:Bézier curve,维基百科详尽中文释义戳这里),我最近在尝试实现复杂的矢量图形动画,发现对贝塞尔曲线的理解馒头那么厚,是完 ...
随机推荐
- python2 安装 MySQL-python
yum -y install mysql-devel libxml2 libxml2-dev libxslt* zlib gcc openssl yum install gcc libffi-deve ...
- Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- 斯特林公式 ——Stirling公式(取N阶乘近似值)
- 使用Python下载文件
python -c "with open('/tmp/file.sh', 'wb') as f: import urllib2; f.write(urllib2.urlopen('http: ...
- 【C#】时间类型修改
鉴于前后端分离发展的迅速.前端很多时间控件都会读UTC时间. 安利一个小知识 // // 摘要: // Creates a new System.DateTime object that has th ...
- spark伪分布式的安装
不依赖hadoop 百度分享安装包地址:http://pan.baidu.com/s/1dD4BcGT 点击打开链接 解压 并重命名: 进入spark100目录: 修改配置: Cd conf 配置单击 ...
- 2017-10-29—英语发音的一些技巧总结
学习了这么多年英语还是一句口语也说不出口,大家一定像我一样有hin多的f*k想说. 在很小的时候我们就学了英语音标,知道了有前元音.中元音.后元音(很多同志多年不用应该已经把这些忘得差不多了,like ...
- [POJ1220]NUMBER BASE CONVERSION (高精,进制转换)
题意 任意进制之间的高进的转换 思路 相模倒排,高精处理 代码 我太弱了,下面附一个讨论里发的maigo思路的代码 ],A[]; ],d[]; main(){ for(scanf("%d&q ...
- __x__(42)0910第六天__表格布局 老旧的布局方法
table 布局 不易于维护,耦合太严重了. 不利于搜索引擎检索. 效果图: html代码: <!doctype html> <html> <head> <m ...
- 01_ if 练习
prompt() 弹出一个对话框,该对话框中会带有一个文本框,用户可以在文本框中输入一段内容. 该函数需要一个字符串作为参数,用作对话框的提示文字. 用户输入内容,将会作为函数返回值.可 ...