阿基米德螺旋线

最初是想用阿基米德螺旋线实现可视化 π,于是学习了泰勒展开计算 π 的过程,同理举一反三实现了计算 e 的过程,学习了画阿基米德螺旋线。后来又实现了一种“走路的直线”,来可视化有理数。本程序糅合了所有功能,实现用螺旋线和行走线,来可视化无理数 π,无理数 e 和有理数。

爱的心脏线

大一的时候听说了 r = a(1 - cosθ) 这个方程,当时想试着自己推出它的直角坐标系方程,可惜数学不好解不出来,现在感觉编程能力变强了,就试着用程序画出这个方程的图像。这个方程本质上就是一个圆绕着另一个圆转一周时动圆上某个定点的轨迹,看起来像心脏线而且有数学家笛卡尔与爱徒的故事做背景,这个方程还染上了一丝浪漫的气氛。现在成功用代码把这个方程画出来了。

令小也画作绘制

这是一张完全用代码画出来的卡通人物。我用的是令小也的作品,通过观察寻找绘制的规律,然后分析绘制的层次。在用程序绘制比较复杂的画作时,一定要耐心,将画作的层次分析清楚,可以大大节省很多代码量。一般都是将复杂的图形用简单的图形进行拼接,覆盖等方式进行绘制。

贝塞尔曲线

动态演示贝塞尔曲线的绘制过程,支持任意点数、任意阶次。点击鼠标右键,在鼠标位置将创建新的点。按住鼠标左键拖动控制点。空格键屏幕将清空。

星罗万象时钟罗盘

编写思路

该程序的难点在于字符串的书写角度,理解了这个就已经理解了这个程序的核心内容,需要注意的地方是这个程序的每一圈代表一个 for 循环,我开始写的时候认为一个 for 循环嵌套一个 for 循环,但是后面我发现 for 循环嵌套的太多,就会导致程序运行的速度变慢,为了提高程序的速度,我将所有的 for 循环分开写,不用循环嵌套。然后用一个 while 循环来控制主循环。还有一个问题,程序中我没有用 Sleep 函数,直接使用了获取系统时间的函数,通过慢羊羊的指导,后续又加以修正,让钟表产生旋转的效果。在这里要感谢慢羊羊,感谢他对我编写的每一个程序进行指导,并给我一个展示的平台,让我对编程产生了浓厚的兴趣,由衷的感谢他。

心得体会

写程序总是兴趣使然,实现自己的想法所带来的成就感还是挺不错。如果发现一个自己想用程序实现的东西,总是心中念念不忘,然后悄悄酝酿着,积累着,当有足够的能力将所看所学所想的组合起来时,那可能就是创新吧。多想,多

...

四杆机构-机械原理

四杆机构模拟。

四杆机构介绍:维基百科、哈工大机械原理课件.

说明

AB 作为主动件,AD 为机架。

根据传入的杆长自动绘制出相应的四杆机构。

如下图,程序绘制了曲柄摇杆、双摇杆、摇杆曲柄、双摇杆机构。

单击鼠标右键循环隐藏圆圈、C2 点、C1 点。

/////////////////////////////////////////////////////////////
// 程序名称:四杆机构-机械原理
// 编译环境:Visual Studio 2019 (v142),EasyX_20210730
// 作  者:luyiran <872289455@qq.com>
// 发布日期:2021-8-11
//
#pragma warning(disable:4244)	
...

绘制一只奥特曼

奥特曼的组成

奥特曼是由斜的椭圆,圆角矩形,圆形,以及曲线的组成的。此处绘制中,主要应用了曲线的的绘制,将奥特曼画的比较饱满。

值得学习的地方

本次绘制过过程中,自己编写了两个函数。一个是绘制有倾斜角的椭圆,用来表示奥特曼的眼睛,这样可以使得奥特曼更加有灵魂。另一个是心形。在平时绘制别的东西时,如果需要,可以直接借鉴。

效果图

源码

///////////////////////////////////////////////////
// 程序名称:绘制奥特曼
// 编译环境:Mictosoft Visual Studio 2013, EasyX_20200315(beta)
// 作  者:luoyh <2864292458@qq.com>
// 最后修改:2020-6-10
//

#include<conio.h>
#include&
...

视觉错觉艺术

一、 视觉错觉效果图如下

二、思想

先画小球从左到右排放,然后再到下一行继续重复上一个过程。

三、完整代码如下

///////////////////////////////////////////////////
// 程序名称:视觉错觉艺术图
// 编译环境:VS2019, EasyX_20200902
// 作  者:梦萤花火
// 最后修改:2021-1-24
//
#include <graphics.h>
#include <conio.h>

int x;								// X轴坐标
int y;								// y轴坐标
int g_multiples = 0;				// 倍数:作用是对弧度角进行改变
float g_PI = 3.1415927;				// 圆周率
float g_radianAngle;				// 起始角的弧度


// 实施画单个完整小球
...

数独

功能概述

该数独有两种玩法,其一为标准数独,另一为对角线数独。标准数独规则每一行、每一列、每一个粗线宫内的数字均含1-9,不重复;而对角线数独,其相对于标准数独来说就是多了一个条件,即要求两条对角线上的数字分别均含数字1-9,不重复。

PS:设立三种难度,分别根据”完成时间”和”填错次数”来评分。

作者前言

由于我本人能力有限,该小项目是单纯用C和EasyX来实现的,好像并没有涉及高级的算法,基本上都是暴力算法(不用找了,我生成一个数独没有用到回溯法;你看过我的GameInit函数就知道了,没看过的我可以告诉你,其实就是用一个模板,再通过简单的转换,得到一个新的数独)。

因为这仅仅是个作业,而且期末需要预习了,所以我能花的时间不能太多,诸如数独的“提示”“笔记”等功能我想想还是算了,留到以后有时间再来完善。

做这个的初心还是想扎实一下自己的编程语言语法基础,培养项目工程化的思想。当然一路下来BU

...

立体多面体旋转

立体多面体旋转说明

思路

 以前写过关于 TIN 三角网的程序,若要了解它的算法,可以去查看TIN三角网的生成 ,里面有相关介绍。很多东西都是先想到,然后才去想办法去做。以前有天圆地方的说法,人们认为天是圆一个球形,而地是一个方方正正的平面。这就是人们在认知的一个过程。TIN 三角网往小了讲,是分布在一个平面上,往大了讲,是分布在一个球面上。

解决方案

人之所以能够发展,是因为人一直在学习,在思考,在想象,在创新。TIN 三角网是在一个平面上进行拓展的,两点间的距离可以通过 x 与 y 进行推导,空间中的两点间的距离可以通过 x y z 进行推导,要实现 TIN 三角网立体化,我需要做的就是将平面的坐标拓展为立体坐标,TIN 三角网里面比较核心的算法就是通过三个点确定圆心,很多人觉得这个很简单,不屑于去思考,认为不就是做两个中垂线,交点就是圆心。从来不去实事求是的列公式,不实践就永远发现不了问题,还洋

...

烟花

这是一个简单的烟花程序,纯代码实现,

代码总长约 260 行,若有心去看应该不难看懂,相关注释已写于源码中。

3D 到 2D 转换 和 物理轨迹严格按照公式计算,

其余个别参数根据估计调试而设置,不用深究。

程序用到的 EasyX 绘图 主要是 solidcircle 和 putpixel,

更多的是对 语言特性、基础数学和物理的应用,亦可见其重要性。

编程之路,需要的不仅仅是语言,愿君共勉。

最后祝大家新年快乐!

界面截图:

源代码:

/*
	程序名称:
			烟花(Fireworks)

	简介:
			用 EasyX 实现的一个简单的烟花程序
			加入 z 轴以实现简单的 3D 视觉效果
		
...