TIN 三角网的生成 铜牌收录

三角网的概念

三角网是由一系列连续三角形构成的网状的平面控制图形,是三角测量中布设连续三角形的两种主要扩展形式,同时向各方向扩展而构成网状,优点为点位分布均匀、各点之间互相牵制、图形强度较高,缺点是扩展较缓慢。

三角网是实现地形三维可视化,数字地面模型(Digital Terrain Model,简称 DTM)是一种很有效的途径。DTM 主要是由栅格和不规则三角网(Triangulated Irregular Network,简称 TIN )两种数据格式来表示,相比于栅格 TIN 具有许多优点,几乎能适用于任何复杂的地形,所以 TIN 是 DTM 常采用的一种格式。

三角网的特性

  1. TIN 是惟一的;
  2. 力求最佳的三角形几何形状,每个三角形尽量接近等边形状;
  3. 保证最邻近的点构成三角形,即三角形的边长之和最小;
  4. 最小角最大,即在所有的三角网中 Delaunay 三角网的最小角是相对最大的。狄洛尼三角网满足以上三个条件,其定义为 : 是相互邻接
...

迷宫小游戏 铜牌收录

基于 EasyX 的迷宫小游戏,有三种随机生成算法。

包含九个文件

  • Maze.h : 初始化头文件
  • Maze.cpp : 程序开端文件
  • Game.h : 游戏类头文件
  • Adventrue.cpp : 冒险模式类文件
  • Forest.cpp : 冒险模式-森林系列类实现文件
  • Dungeon.cpp : 冒险模式-地牢系列类实现文件
  • Infernal.cpp : 冒险模式-地狱系列类实现文件
  • Help.cpp : 帮助信息类实现文件
  • Other.cpp : 刷新界面、放置按钮、输出对话框类实现文件

包含算法

  • 森林系列:Prim 算法
  • 地牢系列:图论 DFS 算法
  • 地狱系列:暴力 DFS 算法

算法说明

以下对这些算法给出简单说明,详细请自行学习(比较有难度):

...

迷宫算法演示 铜牌收录

这不是一个游戏,而是算法分享和算法演示。

通过简单绘图,使得算法的执行过程可视化。

包含两个文件:头文件 MazeAlgorithm.h 和 源文件 main.cpp。

main.cpp 给出基本控制和简单文字按钮。

MazeAlgorithm.h 给出算法的实现和演示绘图,包含算法如下:

一、迷宫生成:

        ① DFS(即深度优先)递归和非递归版本。

        ② 十字分割 递归和非递归版本。

        ③ 随机 Prim。

二、迷宫寻路:

        ① DFS(分为随机方向 和 指定优先遍历方向,是同一个接口)。

        ② A* 寻路。

这对于初学者而言或有难度,而且许多教程只是给出简陋的文字描述,很难上手代码。

若以后有时间,我尽量去完成一篇迷宫算法的博客,然后回头补链接。

以下对这些算法给出简单说明(注:这不足以让你深刻理解算法原理

...

炸金花小游戏 铜牌收录

纯代码实现的一个简单的炸金花的小游戏。

市面上的炸金花似乎已经被禁,因此模拟时没有参考,或许有一些不足。

由于简单模拟,所以没有太多的动画和界面。

程序由 三个头文件 和 一个源文件 组成,便于分块管理。

一、"Cards.h"

        封装了卡牌底层,由三个类组成,单张牌类、三张牌类 和 52 张牌的类。

        有控制台的输出测试接口。

二、“CardGraph.h”

        该文件主要是进行绘图,根据扑克的底层数据进行相关绘制。

        修改:利用宽字符输出实现花色,而不是直接绘制。

        绘制卡片背面心形时,仅需两条直线和两条贝塞尔曲线即可,这里不过多说明。

三、"Controller.h"

        该文件是游戏的控制文件,处理按钮、鼠标、发牌等等操作。

        由两个类组成,Butt

...

烟花 铜牌收录

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

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

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

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

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

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

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

最后祝大家新年快乐!

界面截图:

源代码:

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

	简介:
			用 EasyX 实现的一个简单的烟花程序
			加入 z 轴以实现简单的 3D 视觉效果
			物理计算时 1 像素等效 10cm
			注:计算 3D->2D 时,未采用斜二测画法,而是不计
...

二维天体模型 铜牌收录

一直很喜欢《三体》这部科幻小说,其中诡异的三体运动让我想要一探究竟,
便想着试着模拟一下三体运动,或是多天体的运动情况。

在三体模拟中,大多数情况下,系统都很不稳定,天体之间会很快发生吞噬或逃逸,
吞噬后可能会成为相对稳定的双星系统,当然也有很大概率会再次发生吞噬成为单星系统;
若是逃逸的话,这基本上大概率是没再见面的希望了。
而若是想要找到一个一定时间内相对稳定的三体系统那会很不容易!

在多天体模拟中,粗略估计有一半的情况中心天体能够捕获到一些小天体成为它的卫星,
直接逃逸的天体也时有出现,或者是进入了一个很大周期的轨道中。

此程序只是简单的粗略模拟,一些参数均无实际意义,且本程序仅为一个二维模拟。

执行截图如下:

完整的源代码如下:

////////////////////////////////////////////////////////
// 程序名称:
...

热力学模拟实验(by 常数变易法) 铜牌收录

这个程序是热力学模拟实验。

学热力学与统计物理的时候就想设计一个程序模拟气体分子的运动,这样就能直观地检测那些热力学公式的正确性。
这个程序设计成所有粒子之间的力都是斥力,粒子和边界之间也有斥力。粒子在二维平面运动。

程序的动态执行效果如下:

完整代码如下:

// 项目:热力学模拟实验
// 作者:常数变易法(QQ:1375989292)
// 时间:2019.12.19
// 环境:VC6.0

// 学热力学与统计物理的时候就想设计一个程序模拟气体分子的运动,这样就能直观地检测那些热力学公式的正确性。
// 这个程序设计成所有粒子之间的力都是斥力,粒子和边界之间也有斥力。粒子在二维平面运动。

// 版权:作者原创,无抄袭,不涉及版权问题,仅用作学习

#include <graphics.h>						// 引用图形库头文件
#include <stdio.h>
#include <conio.h>
...

正确的提问方式 铜牌收录

网络是一个很好的交流学习平台,但是有些同学比较郁闷:为什么自己在网上发的问题没人帮自己呢?这多半原因是因为这些同学“不会提问”。本文就简单说一下,应该如何提问。

博弈五子棋(人机对战) 铜牌收录

基于 EasyX 的五子棋软件。

算法部分想了很久,也参考了网上的其他游戏的。原理主要就是:遍历每个空闲的点,根据下在那个点后连成的棋形来判断其分值,再选出分值最高的位置并返回给游戏函数。

还在上小学,更深层次的判定算法还没学,就先将就一下吧。

运行效果如下:

完整源代码如下:

////////////////////////////////////////////////////////
// 程序名称:博弈五子棋
// 编译环境:Visual C++ 2019		EasyX_20190529(beta)
// 作  者:陈可佳 <emil09_chen@126.com>
// 最后修改:2019-9-30
//
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <graphics.h>
#in
...

贪吃蛇大作战 铜牌收录

这是一个贪吃蛇大作战类游戏,修改特性为 AI 不互杀;

该程序有四个类:蛇基类 SnakeBase,玩家类 Player,AI 类,Game 类;
SnakeBase 和 AI 均继承自 SnakeBase,SnakeBase 提供基础接口;
Game 提供数据初始化以及游戏主循环。

程序设计之初,采用“实运行”方式,即所有动画均在地图 imgMap 上真实绘制,
这样却有一些严重的问题,需要不断地记录节点背景以恢复节点经过的地方等。

后修改为“虚运行”方式,判断位置是否可视后直接绘至窗口内,
这样大大降低时间开销,同时不会因为蛇靠近而产生不可擦除的颜色。

至于蛇运行,采用位置继承,即节点下一个位置为上一个节点的位置,但是会发现跨度太大,
解决办法是在这个跨度中插入适当帧数。

执行效果如下:

完整代码如下:

/*
	程序名称:
			贪吃蛇大作战

	
...