贝塞尔曲线 java

devtools/2024/9/25 8:25:22/

参考文章:
理解贝塞尔曲线https://blog.csdn.net/weixin_42301220/article/details/125167672
代码实现参考
https://blog.csdn.net/yinhun2012/article/details/118653732

贝塞尔 一二三阶java代码实现,N阶段可以通过降阶递归实现

java">public class Test extends JPanel {@Overridepublic void paintComponent(Graphics g) {super.paintComponent(g);Graphics2D g2 = (Graphics2D)g;//画图测试贝塞尔曲线ArrayList<T> list = test1B();for (int i = 0; i < list.size(); i++) {//画线的2个点一样即画点g2.drawLine((int)list.get(i).p.x,(int)list.get(i).p.y,(int)list.get(i).p.x,(int)list.get(i).p.y);}list = test2B();for (int i = 0; i < list.size(); i++) {//画线的2个点一样即画点g2.drawLine((int)list.get(i).p.x,(int)list.get(i).p.y,(int)list.get(i).p.x,(int)list.get(i).p.y);if(i%100==0){//展示部分切线g2.drawLine((int)list.get(i).a1.x,(int)list.get(i).a1.y,(int)list.get(i).a2.x,(int)list.get(i).a2.y);}}list = test3B();for (int i = 0; i < list.size(); i++) {//画线的2个点一样即画点g2.drawLine((int)list.get(i).p.x,(int)list.get(i).p.y,(int)list.get(i).p.x,(int)list.get(i).p.y);if(i%100==0){//展示部分切线g2.drawLine((int)list.get(i).a1.x,(int)list.get(i).a1.y,(int)list.get(i).a2.x,(int)list.get(i).a2.y);}}}static class T{Point p;Point a1;//p的切线起始点Point a2;//p的切线结束点}//测试贝塞尔曲线//1阶 2个点static T get1Bse(Point p1,Point p2,double t){T tp = new T();tp.p = new Point();tp.a1 = p1;tp.a2 = p2;tp.p.x = (1-t)*p1.x + t*p2.x;tp.p.y = (1-t)*p1.y + t*p2.y;return tp;}static ArrayList<T> test1B(){ArrayList<T> list = new ArrayList<>();for (int i = 0; i <= 1000; i++) {T tt = get1Bse(new Point(100,100,""),new Point(200,200,""),i*0.001);list.add(tt);}return list;}//2阶 3个点static T get2Bse(Point p1,Point p2,Point p3,double t){T tp = new T();tp.p = new Point();tp.a1 = new Point();tp.a2 = new Point();tp.a1.x = (1-t)*p1.x + t*p2.x;tp.a1.y = (1-t)*p1.y + t*p2.y;tp.a2.x = (1-t)*p2.x + t*p3.x;tp.a2.y = (1-t)*p2.y + t*p3.y;tp.p.x = (1-t)*(1-t)*p1.x + 2*t*(1-t)*p2.x + t*t*p3.x;tp.p.y = (1-t)*(1-t)*p1.y + 2*t*(1-t)*p2.y + t*t*p3.y;return tp;}static ArrayList<T> test2B(){ArrayList<T> list = new ArrayList<>();for (int i = 0; i <= 1000; i++) {T tt = get2Bse(new Point(100,300,""),new Point(200,300,""),new Point(200,400,""),i*0.001);list.add(tt);}return list;}//3阶 4个点static T get3Bse(Point p1,Point p2,Point p3,Point p4,double t){Point p5 = new Point();Point p6 = new Point();Point p7 = new Point();p5.x = (1-t)*p1.x + t*p2.x;p5.y = (1-t)*p1.y + t*p2.y;p6.x = (1-t)*p2.x + t*p3.x;p6.y = (1-t)*p2.y + t*p3.y;p7.x = (1-t)*p3.x + t*p4.x;p7.y = (1-t)*p3.y + t*p4.y;T tp = new T();tp.p = new Point();tp.a1 = new Point();tp.a2 = new Point();tp.a1.x = (1-t)*p5.x + t*p6.x;tp.a1.y = (1-t)*p5.y + t*p6.y;tp.a2.x = (1-t)*p6.x + t*p7.x;tp.a2.y = (1-t)*p6.y + t*p7.y;tp.p.x = (1-t)*(1-t)*p5.x + 2*t*(1-t)*p6.x + t*t*p7.x;tp.p.y = (1-t)*(1-t)*p5.y + 2*t*(1-t)*p6.y + t*t*p7.y;return tp;}static ArrayList<T> test3B(){ArrayList<T> list = new ArrayList<>();for (int i = 0; i <= 1000; i++) {T tt = get3Bse(new Point(100,500,""),new Point(200,600,""),new Point(300,450,""),new Point(400,300,""),i*0.001);list.add(tt);}return list;}/*n阶的实现: todo
因为贝塞尔曲线的规则可以让n个顶点的问题降维到n-1的顶点的计算,那么我们递归套娃,是不是将n个顶点的问题变成由最基本的3个顶点(2阶)计算规则来实现呢?
例如:5个顶点的问题,先降到成4个顶点,再降维到3个顶点*/
}

效果图
在这里插入图片描述


http://www.ppmy.cn/devtools/38957.html

相关文章

ubuntu 查看 postgresql 用户

在 Ubuntu 上查看 PostgreSQL 的用户&#xff08;角色&#xff09;&#xff0c;你可以使用 psql 命令行工具连接到 PostgreSQL 数据库&#xff0c;并执行 SQL 查询来查看所有存在的用户和他们的权限。 以下是如何查看 PostgreSQL 中所有用户的步骤&#xff1a; 以 postgres 用…

对camera raw中的纹理和清晰度的补充解释

之前对于环的解释&#xff0c;不太行&#xff0c;这里我给出进一步地说明。 假设ai都相同的时候&#xff0c;而符号只与j有关&#xff0c;所以可以设为a&#xff0c;傅里叶变换公式可以写为:fj&#xff0c;a为ai取同一个值。,这里的j已经是逆序过,写为j-。 这个简化的公式可以…

uniapp开发小程序---文章转发分享问题

一、需求 标题这里有三个新闻分类&#xff08;跳转的列表页是同一个&#xff0c;是根据分类字段来判断显示的&#xff09;&#xff1a; 在列表页面点击右上角分享给好友后是下图所示&#xff1a; 要求点击每个分享过来的页面时&#xff0c;跳转到对应的新闻列表下。 二、代码…

位图转矢量图在线Ai神器,让你的图片无限放大不失真的秘密武器,重点免费、免费、免费

&#x1f4bb;开局附上神器地址&#xff1a;Convert PNG, JPG files to SVG vectors online - svg.tmttool.com 这边结合自己的使用场景简单做下使用教程&#x1f447;商业场景中经常需要对Ai生成的插画图进行二次创作&#xff0c;了解Ai做图的小伙伴就知道生成的图分辨率有限&…

docker-compose管理jenkins

1.安装docker和compose 1.docker 更新系统&#xff1a;yum update 安装依赖项&#xff1a;yum install -y yum-utils device-mapper-persistent-data lvm2 配置镜像源&#xff1a;yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce…

数据结构之栈的超详细讲解

目录 引言 一.栈的概念 二.栈的结构 三.栈的实现 栈结构的实现 栈操作函数的声明 栈中方法的实现 栈的初始化 栈的销毁 入栈 出栈 取栈顶元素 判断栈中是否为空 获取栈中数据个数 四.测试 代码展示: 结构展示: 五.小结 六.完整代码 Stack.h Stack.c text…

AH8651-220V转3.3V低成本方案

本篇文章将介绍一种220V转3.3V低成本方案&#xff0c;该方案采用AH8651芯片&#xff0c;无需外接电感&#xff0c;具有高效率的智能控制、宽广的交流输入范围、内置过流保护、欠压保护和过热自动关断等功能。AH8651可以通过SEL引脚选择输出电压&#xff0c;启动时通过内部高压电…

时光荏苒,大学时光的珍贵与怀念

时光荏苒&#xff0c;转眼间大学时光已成为记忆中一抹深刻的风景。回首往昔&#xff0c;那段充满朝气和梦想的大学时光总是让人怀念。如果有机会回到大学时光&#xff0c;我想对当时的自己说一些话。 大学时光如同一本厚重的书籍&#xff0c;每一页都记录着青春的欢笑和泪水。当…