屏保:画线圈LineFlower
LineFlowerSP
小时候玩过一种画线圈的玩具,将一个圆形齿轮在一个大圈里转,会画出各种图形来.这个程序就是模仿它做的.算法原理:将一个圆围绕着另一个大圆公转,并且它还做自转运动.那么圆内一点的运动轨迹就能生成一个奇妙的图形.更奇妙的是,一个小小参数的改变,会使整个画面完全不同.
程序启动后,会随机生成不同的图形,点击鼠标或按下键盘任意按键会自动退出.使用鼠标滚轮滚动进行图形切换.我的博客头像就是用这个软件生成的.
下载地址:
http://files.cnblogs.com/WhyEngine/LineFlower%E5%B1%8F%E4%BF%9D.zip
图形生成算法代码:
void CLineFlowerSPEntity::Reset()
{
m_nFinishTime = ;
m_nVerticesNum = ;
m_nPlayVertices = ; UINT width;
UINT height;
m_pDX9Render->GetBackBufferSize(width, height); Vector2 vScreenCenter(width*0.5f, height*0.5f); Yreal screenCircleRadius = width < height ? width*0.5f : height*0.5f;
if (screenCircleRadius < 10.0f)
{
return;
} Yreal rotateCircleRadius = yf_rand_real(screenCircleRadius - 128.0f);
Yreal fixCircleRadius = screenCircleRadius - rotateCircleRadius;
Yreal offset = yf_rand_real(64.0f, screenCircleRadius - 10.0f);
if (yf_rand_bool())
{
offset = -offset;
} Yreal stepScale0 = yf_rand_real(0.1f, 1.0f);
if (yf_rand_bool())
{
stepScale0 = 1.0f / stepScale0;
}
Yreal stepScale180 = yf_rand_real(0.1f, 1.0f);
if (yf_rand_bool())
{
stepScale180 = 1.0f / stepScale180;
} Yreal offsetScale0 = yf_rand_real(0.1f, 1.0f);
if (yf_rand_bool())
{
offsetScale0 = 1.0f / offsetScale0;
}
Yreal offsetScale180 = yf_rand_real(0.1f, 1.0f);
if (yf_rand_bool())
{
offsetScale180 = 1.0f / offsetScale180;
} Yreal maxOffset = (offsetScale180 > offsetScale0) ? offsetScale180 : offsetScale0;
maxOffset *= fabs(offset);
Yreal posScale = screenCircleRadius / (fixCircleRadius + maxOffset);
posScale *= 0.95f; Yreal scale0 = yf_rand_real(0.1f, 1.0f);
if (yf_rand_bool())
{
scale0 = 1.0f / scale0;
}
Yreal scale180 = yf_rand_real(0.1f, 1.0f);
if (yf_rand_bool())
{
scale180 = 1.0f / scale0;
} Yreal step = screenCircleRadius / rotateCircleRadius;
if (step > 360.0f)
{
return;
} m_nCirclesCount = YD_MAX_CIRCLES_COUNT;
m_nVerticesNum = m_nCirclesCount * ; Vector2 vCenter;
Yreal degree = ; Vector2 vPos;
Vector2 vPos0;
Vector2 vPos1;
Yuint index;
Yreal r, a;
Yreal scale; RhwVertex* vb;
m_pVB->Lock(, , (void**)&vb, ); for (Yuint i = ; i < m_nCirclesCount; i++)
{
for (Yuint j = ; j < ; j++)
{
vCenter.x = vScreenCenter.x + fixCircleRadius*m_listSinValues[j];
vCenter.y = vScreenCenter.y + fixCircleRadius*m_listCosValues[j]; r = fabsf(degree - 180.0f) / 180.0f;
scale = yf_lerp(offsetScale0, offsetScale180, r); index = (Yint)degree;
vPos0.x = vCenter.x - offset*scale*m_listSinValues[index];
vPos0.y = vCenter.y - offset*scale*m_listCosValues[index]; vPos1.x = vCenter.x - offset*scale*m_listSinValues[index + ];
vPos1.y = vCenter.y - offset*scale*m_listCosValues[index + ]; a = degree - index;
vPos = vPos0*(1.0f - a) + vPos1*a;
vPos.x = posScale*(vScreenCenter.x - vPos.x) + vScreenCenter.x;
vPos.y = posScale*(vScreenCenter.y - vPos.y) + vScreenCenter.y; vb[i* + j].Set(vPos.x, vPos.y, 0.0f, 1.0f); scale = yf_lerp(stepScale0, stepScale180, r);
degree += step*scale;
degree = fmodf(degree, 360.0f);
} if (degree < YD_DEGREE_MAX_ERROR || degree > 360.0f - YD_DEGREE_MAX_ERROR)
{
m_nCirclesCount = i + ;
m_nVerticesNum = m_nCirclesCount * ;
vb[m_nVerticesNum] = vb[];
m_nVerticesNum++;
break;
}
} m_pVB->Unlock();
}
屏保设置方式
XP:
将目录下的所有文件拷贝到WINDOWS系统目录下如"C:\WINDOWS\system32"
在设置屏保的对话框中,选择"LineFlowerSP"
WIN7,WIN8
将目录下的所有文件拷贝到"C:\WINDOWS\SysWOW64"或"C:\WINDOWS\SysWOW32"目录下
在设置屏保的对话框中,选择"LineFlowerSP"
屏保:画线圈LineFlower的更多相关文章
- WhyDemo: 画线圈LineFlower
画线圈LineFlower 刚发过画线圈的屏保程序,现在发一下它的可编辑版本.可以对线圈的相关参数进行设置. 小时候玩过一种画线圈的玩具,将一个圆形齿轮在一个大圈里转,会画出各种图形来.这个 ...
- 3D屏保: 线圈
LineFlower3DSP 一个3D屏保程序,算法的原理类似于圆内轮旋线的生成. 下载地址: http://files.cnblogs.com/WhyEngine/LineFlower3D_sp.z ...
- 一个仿windows泡泡屏保的实现
一个仿windows泡泡屏保的实现 有天看到有人在百度知道上问windows 泡泡屏保该怎么用C#做,一时有趣,就做了一个出来,对于其中几个要点总结如下: 一,屏保程序的制作要求 屏保程序的扩展名是. ...
- python写的屏保程序
__author__ = 'ChenYan' from random import randint from tkinter import * class Randball(): def __init ...
- Tkinter 项目-屏保
参考教程,以及网上资料,针对小白更好理解 关于tkinter的屏保涉及的知识点和思想 项目分析: 屏保启动方式:手动,自动 敲击键盘或者移动鼠标后,或者其他引发事件,则停止 如果屏保是一幅画的话,则没 ...
- python实现屏保计时器
什么都不说先上图吧,Python 初学者实现屏保计时器 原理:利用 Python turtle 库实现快速画图,每隔一秒钟擦除屏幕,然后获得电脑实时时间,再次画图,呈现动态时间. 关于数字如果画,可以 ...
- Python---TKinter项目实战---屏保
### 项目分析 - 屏保可以自己启动,也可以手动启动 - 一旦敲击键盘或者移动鼠标后,或者其他的引发时间,则停止 - 如果屏保是一幅画的话,则没有画框 - 图像的动作是随机的,具有随机性,可能包括颜 ...
- C#制作简易屏保
前言:前段时间,有个网友问我C#制作屏保的问题,我瞬间懵逼了(C#还可以制作屏保!).于是我去查阅相关资料,下面把C#如何制作屏保的过程及我学习过程的心得也记录下来,希望对需要的人能有帮助. 基本思路 ...
- 仿W8屏保
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- 最详细的vue-cli安装教程 &^没有之一 ^& 大神亲测。。╮( ̄▽  ̄)╭
这里介绍使用git安装,电脑自带命令行依然可以使用进行安装 第一步 node环境安装 1.1 如果本机没有安装node运行环境,请下载node 安装包进行安装 1.2 如果本机已经安装node的运行换 ...
- Oracle数据库脚本中的set define off
2018年8月6日15:11:34 Oracle数据库脚本中的set define off 前言 最近在公司写需求,接触到脚本,第一句set define off;就不知道什么意思了,查询后记录之. ...
- CSUOJ 1007 矩形着色
Description Danni想为屏幕上的一个矩形着色,但是她想到了一个问题.当点击鼠标以后电脑是如何判断填充的区域呢? 现在给你一个平面直角坐标系,其中有一个矩形和一个点,矩形的四条边均是平行于 ...
- Linux基础命令—网卡
#1.实时查看网卡流量 #sar -n DEV 1 5 [每间隔1秒刷新一次,共5次] sar -n DEV 1 5 IFACE 表示设备名称 rxpck/s 每秒接收的包的数量 txpck/s 每秒 ...
- (一)预定义宏、__func__、_Pragma、变长参数宏定义以及__VA_ARGS__
作为第一篇,首先要说一下C++11与C99的兼容性. C++11将 对以下这些C99特性的支持 都纳入新标准中: 1) C99中的预定义宏 2) __func__预定义标识符 3) _Pragma操作 ...
- 批量ping工具fping
批量ping工具fping ping是各个系统自带的基于ICMP协议的主机探测工具.但该工具一次只能检测一个主机,不满足渗透测试批量探测的需要.Kali Linux提供一款批量探测工具fping. ...
- iOS 9应用开发教程之编辑界面与编写代码
iOS 9应用开发教程之编辑界面与编写代码 编辑界面 在1.2.2小节中提到过编辑界面(Interface builder),编辑界面是用来设计用户界面的,单击打开Main.storyboard文件就 ...
- 【十月のA Letter to 后辈菌】
文化课没什么好说的,那就不说了吧(^▽^) 以下送给下两级的学弟学妹们: 马上就要NOIP了,现在自己从戏中人变成了看戏人.不管高一还是高二,我感觉只要能走到这一步就很了不起了,不管结果如何,比赛过程 ...
- [UOJ#245][UER#7]天路(近似算法)
允许5%的相对误差,意味着我们可以只输出$\log_{1.05} V$种取值并保证答案合法.并且注意到答案随着区间长度而单增,故取值不同的答案区间是$O(\log_{1.05} V)$的. 于是初始x ...
- BZOJ.4316.小C的独立集(仙人掌 DP)
题目链接 \(Description\) 求一棵仙人掌的最大独立集. \(Solution\) 如果是树,那么 \(f[i][0/1]\) 表示当前点不取/取的最大独立集大小,直接DP即可,即 \(f ...