java画bezier曲线_java 画的4个点的Bezier曲线
//其中第2和第3个实心点为控制点,可以鼠标拖动,但是不能太快,不然曲线点的坐标x,y计算跟不上。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class test2 extends JPanel implements MouseListener,MouseMotionListener{
private static final long serialVersionUID = 1L;
private Point2D[] controlPoint;
private Ellipse2D.Double[] ellipse;
private static final double SIDELENGTH = 8;
private int numPoints;
private double t=0.002;
public test2(){
numPoints = 0;
controlPoint = new Point2D[4];
ellipse = new Ellipse2D.Double[4];
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
@Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setColor(Color.MAGENTA);
for(int i=0; i
if(i>0 && i
g2.fill(ellipse[i]);
}else {
g2.draw(ellipse[i]);
}
if(numPoints>1 && i
g2.drawLine((int)controlPoint[i].getX(), (int)controlPoint[i].getY(), (int)controlPoint[i+1].getX(), (int)controlPoint[i+1].getY());
}
if(numPoints == 4) {
double x,y;
g2.setColor(Color.RED);
for(double k=t; k<=1+t; k+=t) {
x = (1-k)*(1-k)*(1-k)*controlPoint[0].getX() + 3*k*(1-k)*(1-k)*controlPoint[1].getX()
+ 3*k*k*(1-k)*controlPoint[2].getX() + k*k*k*controlPoint[3].getX();
y = (1-k)*(1-k)*(1-k)*controlPoint[0].getY() + 3*k*(1-k)*(1-k)*controlPoint[1].getY()
+ 3*k*k*(1-k)*controlPoint[2].getY() + k*k*k*controlPoint[3].getY();
//System.out.println(x + " " + y );
g2.drawLine((int)x, (int)y, (int)x, (int)y);
}
}
}
@Override
public Dimension getPreferredSize() {
// TODO Auto-generated method stub
return new Dimension(600,600);
}
public static void main(String[] agrs) {
JFrame f = new JFrame();
test2 t2 = new test2();
f.add(t2);
f.pack();
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
if(numPoints <4) {
double x = e.getX();
double y = e.getY();
controlPoint[numPoints] = new Point2D.Double(x, y);
Ellipse2D.Double current = new Ellipse2D.Double(x-SIDELENGTH/2, y-SIDELENGTH/2, SIDELENGTH, SIDELENGTH);
ellipse[numPoints] = current;
numPoints++;
repaint();
}
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
private int find(Point2D p){
int flag = 5;
for(int i=0; i
if( ellipse[i].contains(p)) {
flag = i;
return flag;
}
}
return flag;
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
int flag = find((Point2D)e.getPoint());
if( flag<5) {
double x = e.getX();
double y = e.getY();
controlPoint[flag] = new Point2D.Double(x, y);
Ellipse2D.Double current = new Ellipse2D.Double(x-SIDELENGTH/2, y-SIDELENGTH/2, SIDELENGTH, SIDELENGTH);
ellipse[flag] = current;
repaint();
}
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
}
java画bezier曲线_java 画的4个点的Bezier曲线相关推荐
- java中画图喷枪_JAVA 画图板实现(基本画图功能+界面UI)一、界面实现
/*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 这段时间在学JAVA的swing界面开发,试着做了个画图板.实现了直线.曲线.喷枪.矩形.圆形.文字 ...
- java 折线动图_Java画折线图
JFreeChart 是开放源代码站点SourceForge.net 上的一个 JAVA 项目,它主要用来各种各样的图表,这些图表包括:饼图.柱状图 ( 普通柱状图以及堆栈柱状图 ).线图.区域图.分 ...
- java画bezier曲面_计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制
<计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制>由会员分享,可在线阅读,更多相关<计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(9页珍 ...
- java画图板代码_java学习小总结——画图板制做(附代码)
学习java这门编程语言也有一个多月了.~若是能用本身学的编程语言去开发一些小程序软件能够说是本身一直求之不得吧!.模仿XP的画图板的开发则是学java来最先作的一个小软件.也是把以前学到的不少知识得 ...
- 用java的事件监听机制实现一个简单的画板应用:通过选择图形按钮和颜色按钮来画出自己想画的图形:直线、空心矩形、圆形、折线、多边形、圆角矩形、弧线、曲线、喷枪
今天做一个简单的画板,完整代码附在文章末尾处. - 功能:通过选择图形按钮和颜色按钮来画出自己想画的图形. - 界面展示: - 思路: 1.做一个可视化界面:创建JFrame对象,并设置Title.S ...
- 画王八java代码参数_java画乌龟源代码-郭遥航.doc
java画乌龟源代码-郭遥航.doc /*JAVA基本功小练习用java语言描述小王八用鼠标可以拖动小乌龟进行移动选中乌龟时可以显示小乌龟的腹面*/importjava.awt.*;importjav ...
- java excel复制图片_java实现图片用Excel画出来
本文实例为大家分享了java用Excel将图片画出来的具体代码,供大家参考,具体内容如下 能够将任何图片在excel上利用单元格背景完整的描绘出来. 像网络上出现的用excel画出超级玛丽等等,各种图 ...
- python电化学cv曲线怎么画_我如何使用参数自动绘制翼型
引言 在用遗传算法优化翼型之前,我们需要建立一个足够大的翼型种群库.这时候就需要我们参数化绘制翼型,自动生成第一批种子. 翼型的构成 首先,我们得知道翼型是怎么构成的.常用翼型测算工具的都知道,单弯度 ...
- python画函数曲线-python画蝴蝶曲线图的实例
蝴蝶曲线是由Temple H・Fay发现的可用极坐标函数表示的蝴蝶曲线. 由于此曲线优美, 因此就想把它作为博客favicon.ico,这里我使用pytho matplotlib.pyplot包来绘制 ...
最新文章
- 最近面试 Java 后端开发的感受!
- 又爱又恨的 Microsoft Edge!
- 常用Linux命令(续)
- python 编程入门-Python编程入门电子书教程,看这几个就够了
- Java SpringMVC框架学习(二)httpServeltRequest和Model传值的区别
- rjdbc读取mysql_R通过RJDBC连接外部数据库 (转)
- intellij idea 好用的快捷键(mac版)
- 拓端tecdat|R语言 RevoScaleR的大规模数据集决策树模型应用案例
- 图-3月12日-[评委计分系统3.0-双屏专业版]又有较大的专业升级,
- 2014年6月计算机二级c语言答案,2014年计算机二级C语言真题及答案(4)
- JSP的九大内置对象
- 视频监控 ezuikit.js
- 参与者模式(Actor model)
- API 接口加密及请求参数加密
- OVER(PARTITION BY)函数介绍
- 【LeetCode】799.香槟塔
- 华三HCL免费下载体验
- 【python爬虫实战】python3.7+selenium3.7 登录天眼查网站查询企业的公开信息
- 模拟电路设计(26)---D/A转换器电路原理
- Jmeter-PerfMon Metrics Collector监控解析