java——从心率图到分形山脉再到神级抽象山脉

数字艺术——分形山(一)夜色星空山峦叠 数字艺术——分形山(一)夜色星空山峦叠前言效果图探索规律代码实现关键代码说明运行效果美化填充背景山峦联系我 前言 如果说能画出一条直线,就能画出远近高低各不同的山峦,你信么?在遇见分形后,我相信了。 效果图 探索规律 我们来看看这张来源网络的手绘山图片,山的整体效果类似一个凸起的角,选取山的某一个局部,我们还是可以得到一个凸起(或者凹陷)的角,了解这点,我们先取两个点,连线: 接着我们取这两... 阅读详情

前言

整这个山脉花了我好长时间,最开始老师给我提出这个课题的时候大概是5天前吧,开始的时候想了一段时间,没想出来,结果落下了。中间断了几天搞学校的事儿去了,今天晚上又去上课了解了一下,再参考了一下学长的代码才终于整了出来,并且在途中还弄出了一些意想不到的结果(图像还是挺有趣的,就是不知道原理是什么)

先上几张我做的过程中的图吧

这是第一次的,直接做成对称心率了。。。在这里插入图片描述
第二次,线条不连接,但是有勒味儿了在这里插入图片描述
这就是意外的结果,老师说比要求做的还好,还让我把代码发给他,实际上我是懵逼的,为啥会出现这种,我也不知道啊。这个确实解释不了在这里插入图片描述
这是最后的成果,反而觉得了无生趣了在这里插入图片描述
然后我又将前面的图像代码相互重合,结果形成了这样的结果在这里插入图片描述
以及这样。。。
在这里插入图片描述
后面两个出现了断层,看上去像是几张图拼起来的,就很神奇。。。

上代码,看方法

说实在的,上面的结果我所能解释的就是画线和心率图,后面的确实不知道是怎么出来的。(希望编程大佬能够指点指点我)

看着图像这么复杂,实际上几个递归就能解决问题

问题分析

我们先考虑简单点的,山嘛,就是起起落落,但是起落幅度不大。我们只需要先确定两个点,取其x轴中点,为了体现起伏感,y轴取中点的同时还要加一个随机值,这里要考虑一个问题,若是随机值一直是同一个范围,点与点之间的差距就会很大,最后会形成尖刺状,所以要将取值范围随递归按比例缩小。这就是全部的问题,先例出来,后面一一展示。

取随机值,并取缩小率

java中有取随机值的包,所以我们之间引入,并创建对象。

import java.util.Random;
Random rand = new Random();//我们将随机值命名为rand
double range=(rand.nextInt(1080)-540)*k;//随机值的初始取值范围约为-540到540
k*=0.5;//k的值决定了起伏程度,k的初始值为1

这里解释一下随机值的取值范围,
rand.nextInt(1080)呢,会取0到1079的值,我们减去之间值540,随机值取0的时候range就是-540,取1079时就是539(我的电脑屏幕y轴最大为1080)

值得注意的是k的取值,它决定了线条的起伏程度,这个值要取好,否则会很突兀,感兴趣的朋友可以试一试。

取中值

我们首先确定两个点x1,y1(0,540)和x2,y2(1920,540)分别位于屏幕左右两侧的中点,记录中点x0=(x1+x2)/2,y0=(y1+y2)/2+range。这里y0的range是必须要加的,否则就没有起伏了,成为一条直线。

	double x0=(x1+x2)/2;
	double y0=(y1+y2)/2;

走循环,用递归

接下来只要递归就完事儿了

draw1(g,(int)x1,(int)y1,(int)x0,(int)y0,depth-1,k);
draw1(g,(int)x0,(int)y0,(int)x2,(int)y2,depth-1,k);

注意,这里的递归有两个一个是画以左边为基础的线,另一个是画右边的线,我试了一下,只用一个递归会出现只运行不画线的情况。

完整代码

public void draw1(Graphics g,int x1,int y1,int x2,int y2,int depth,double k) {
		//depth代表递归等级
		Random rand = new Random();
		
		if(depth>1) {
			double range=(rand.nextInt(1080)-540)*k;
			double x0=(x1+x2)/2;
			double y0=(y1+y2)/2+range;
			k*=0.5;
			draw1(g,(int)x1,(int)y1,(int)x0,(int)y0,depth-1,k);
			draw1(g,(int)x0,(int)y0,(int)x2,(int)y2,depth-1,k);
//			draw1(g,(int)x1,(int)(y1+range),(int)x0,(int)y0,depth-1,k);
//			draw1(g,(int)x0,(int)y0,(int)x2,(int)(y2+range),depth-1,k);//两个为一组,不同组的效果不同,也可以结合,会出现抽象的3D山脉
//			draw1(g,(int)x1,(int)(y1+range),(int)x0,(int)(y0+range),depth-1,k);//画抽象山脉时递归等级不能过大,否则会运算很久
//			draw1(g,(int)x0,(int)(y0+range),(int)x2,(int)(y2+range),depth-1,k);
   			
  		}
		else {
			g.drawLine((int)x1, (int)y1, (int)x2, (int)y2);//递归等级设置为10
	}
	}
	if(btnstr.equals("分形山脉")) {
			draw1(g,0,540,1920,540,10,1);
		}

小结

以上就是对分形山脉的粗略解释,里面有很多我还未解决的问题,希望自己能够在以后的学习中逐渐领悟,也希望有大佬来为我指点。这里省略了画图板的制作,如果以后有时间的话会补上,写画图板的话又会有好多内容,不知道以后有没有时间咯。

递归分形--山脉 绘制面板 public class DrawPanel extends JFrame{ static Graphics g; ImageObserver imageObserver; public Graphics getG() { return g; } public void ShowUi() { //流式布局 this.setLayout(new FlowLayout()); Button 阅读详情

相关推荐

使用雷达测量心率和呼吸频率项目(14)- 安卓应用程序

该应用程序应该连接到安装有雷达的 Raspberry Pi 3 Model B+。Acconeer 的 A111 雷达是传感器板上的 60 GHz 脉冲相干雷达系统,带有相关的连接器板(Acconeer 的 R112 和 XC112)。在 Raspberry Pi 上运行的 Python 程序可在 https://github.com/Kandidatarbete-Chalmers-MCCX02-19-06/RaspberryPiRadarProgram获得。当然,应用程序也可以连接到其他设备,因为它具有等

leva的博客 402

三角形分形山脉

三角形分形山脉原理 原型图 如图,这是三角形分形山脉的一个原型图。首先我们让x1、x2、x3三个点组成的三角形的各条边的中点mid1、mid2、mid3可以在大三角形内部画一个三角形,这时就会有四个小三角形,那么我们对这四个小三角形做同样的操作,如此就可以画出雏形了。接下来我们只需要对内部每个需要连线三角形的y坐标 ...

qq_44836027的博客 1751

java画心电图

java画心电图,根据心电图数据,画出心电图,网上找了半天,都只是实例型的,最后没办法,自己写代码搞定,与真实的心电图效果一致 由于没有资源分了,暂时赚取一点,谢谢

分形应用:造山

一、分形山脉   1、山脉原型:     分形是具有自相似性的图形,即它们都具有最初的原型。如果山脉是分形,那它的原型又是什么?容易想到的是简单的三角形。一个立起的三角形,俨然山的抽象。   2、递归迭代:     那三角形又是如何能一步一步地内部迭代而逼近一座山呢?在1978年,LorenCarpenter就解决了这个问题。他以简单而机械的方法:递归分割、中点置换,绘制了如下图形。 ...

weixin_34343308的博客 689

opengl实现分形山脉

opengl实现分形山脉,计算机图形学的作业。

经典分形山(D-S)算法——Visual C++实现

很经典的分形山算法,来源于孙博文《分形算法与程序设计——Visual C++实现》一书。

基于分形的山脉河流生成

自相似所谓自相似,是一种尺度变换下的不变性(scale-invariance),即在不同尺度下观察分形可以看到近似相同的形象,若把整个对象的局部放大,再把局部的局部放大,都可以看到相似的结构特征。但是这种自相似并不像整形的相似那么严格,允许相似中的不相似,不需要也不可能完全相同。比如,科赫曲线,整体是闭合的,但任一部分都不是封闭曲线。分形自相似意味着部分与整体有一样的复杂性:一样曲折、琐碎、纷乱、

爱冒险的技术宅 6085

Java实现美丽的分形

NULL 博文链接:https://1975417219.iteye.com/blog/1982701

java - (二)netty 心跳监测机制

1.心跳检测机制 1.1 定时断线重连 客户端断线重连机制 客户端数量多,且需要传递的数据量级较大。可以在周期性的发送数据的时候,使用。要求对数据的即时性不高的时候,才可使用。 优点:可以使用数据缓存。不是每条数据进行一次数据交互。可以定时回收资源,对资源利用率高。相对来说,即时性可以通过其他方式保证。如: 120秒自动断线。数据变化1000次请求服务器一次。300秒中自动发送不足1000次的变化数据。 对于长连接的程序断网重连几乎是程序的标配。断网重连具体可以分为两类: CONNECT失败,需要重连

saienenen的博客 1899

java实现的根据心电数据计算心率,最大、最小、平均心率

java实现的根据心电数据计算心率,最大、最小、平均心率;心率数据如下1991,1990,1987,1985,1990,1993,1988,1991,1991,1993,1996,2002,2013,2026,2035

3D分形山JAVA代码

3D分形山JAVA代码 可以随机生成一个3D山脉 代码才180多行

直线分形山脉

直线分形 直线分形平面山脉 想要实现这个效果的思想就是,由x1、x2所确定的一条直线,我们取它们的中点x3然后允许x3的y坐标在一定范围内随机波动,(这种情况下我们让x1连接x3,x2连接x3就会看起来有小山的感觉了,但其实我们是在递归结束时才开始连线的)接下来做相同的动作,让x1与x3的中点x4的y坐标在一定范围内波动,x2与x3的中点x5的y坐标在一定范围内随机波动,就这样递归下去,最后在我们完成设定的递归层数后就开始连线,并且填充它们之间所包含的区域,那么就实现了直线分形的平面山脉啦。(作为手残党的我

qq_44836027的博客 512

html5+svg实现的分形山脉地形图生成器源码.zip

html5+svg实现的分形山脉地形图生成器源码

matlab分形山脉,shadertoy的一款分形山脉

在 shadertoy.com 上发现一款挺不错的分形山脉, 改写到 Codea 中, 代码如下:function setup()parameter.watch("1/DeltaTime")local tex1 = readImage("Dropbox:3D-grass2")m1 = mesh()m1.shader=shader(f.vs,f.fs)m1.shader.iResolution = ...

weixin_42099087的博客 437

Halcon窗体开发避坑指南:C#自定义控件实现7大图像交互功能

本文详细介绍了如何利用C#封装自定义Halcon控件,以解决原生HWindowControl功能不足的问题。通过实战代码,展示了如何实现图像按比例显示、鼠标拖动缩放、灰度值读取、图像保存、截图及图形叠加等七大核心交互功能,并重点剖析了内存管理、坐标转换等开发避坑要点,帮助开发者构建稳定可复用的机器视觉组件库。

weixin_29251131的博客 292

航空发动机轴承故障诊断

《航空发动机主轴承故障诊断的挑战与HIT数据集研究》 摘要: 航空发动机主轴承作为关键部件,其可靠性直接影响飞行安全。然而,主轴承故障诊断面临信号信噪比低、传输路径复杂、故障类型多样、变工况运行等挑战。哈尔滨工业大学团队开发的HIT数据集为研究提供了真实工况下的实验数据,包含正常、内圈和外圈故障三种状态,具有高仿真度和强挑战性特点。研究表明,传统诊断方法在该数据集上准确率仅71-85%,突显了诊断难度。团队提出的ISONet新方法通过输入空间过参数化技术,将诊断准确率提升至99%以上,为航空发动机轴承故障诊

tyutwuxuan的博客 996

python 计算方位角(根据两点的坐标计算)

知道两点坐标,怎么计算两点方向的方位角? 答:首先计算坐标增量dx,dy(两个对应坐标分量相减,终点的减始点的)。 若dx,dy中有一个为零时,根据另一个的正负决定方位角(0,90,180,270这四个中的一个,可画坐标轴图分析,但不要画为数学坐标哦)。 基本思路: 若dx,dy都不为零;则 计算a=arcatn(|dy/dx|)(这好像叫象限角) 当dx>0dy>0时方位...

JohnieLi的博客 4万+

3D数学-动力学

3D数学-11-动力学 旋转运动学 二维旋转动力学 首先我们考虑最简单的情况: 我们将F施加在圆盘(忽略质量)上的一个点(质量为m)上 图中:F为我们施加的力,O是枢轴原点。 通过基本的运算,我们可以得到 F'= F*sinθ 那么切向加速度 a = F'/ m 切向加速度是线性速度的加速度,我们通过除以半径获得角加速度 α = a / r 现在,我们换一种方式,那就是通过杠杆臂的方式去施加力 为了能够计算出m点的角加速度,我们需要引入一个概念:扭矩 他的理解类似于力矩,公式如下 τ = Flsi

韩天衣的博客 2285

python 计算地球上两点距离和方位角(bearing)的包geographiclib

通过经纬度计算地图上两点的距离及方位角,百度的结果是许多个人写的函数公式,但是python的包那么多,不可能没有这种计算,自建的函数肯定不如公用的包,后来搜到一个https://stackoverflow.com/questions/17624310/geopy-calculating-gps-heading-bearing     Use the geographiclib package...

qq_27361945的博客 1万+

2021电子科技大学分布式系统期末考点精析与实战解析

本文深入解析2021年电子科技大学分布式系统期末考试核心考点,包括分布式事务、时钟同步、GFS架构等高频内容。基于回忆版试题,提供实战解析与应试技巧,帮助考生高效复习。重点涵盖两阶段提交、Cristian算法等关键技术,适合计算机专业学生备考参考。

weixin_29251131的博客 543

【计算机视觉学习03】全景图像拼接

文章目录一、基本原理1.1 图像拼接的几何原理1.2 直线,圆,复杂曲线方程拟合1.3 RANSAC算法1.4 APAP算法1.5 寻找最佳拼接缝(Seam Finding)1.5.1 最大流问题1.5.2 最大流问题的增广链算法1.5.3 最大流最小割定理二、 图像拼接具体实现2.1 代码2.2 运行结果 一、基本原理 将两幅或多幅具有重叠区域的图像,通过特征匹配将具有相同的特征点(SIFT特征点)的图像拼接在一起,将来自多个不同视角拍摄的图像变换到同一视角下,拼接成一张宽视野图像。 图像拼接基础流程

一个正在努力学习的iter 7790

shadertoy的一款分形山脉

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33874713的博客 410

手把手教你用STM32实现SPWM逆变器控制(附完整代码)

本文提供了一份基于STM32实现SPWM逆变器控制的完整实战指南。文章从硬件选型(如STM32F103C8T6、IR2104驱动器)入手,详细解析了利用定时器TIM1生成SPWM波形的核心原理与代码实现,并涵盖了驱动电路、全桥功率电路及LC滤波器的设计要点与调试技巧,旨在帮助读者从零构建一个可靠的单相全桥逆变器系统。

weixin_29208327的博客 592
上一篇: 懒惰的松雅——湖南大学程序设计作业
下一篇: 快速排 序
南懿烨曦
博客等级 码龄6年 108粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值