会旋转的星状图
来源:互联网 发布:云计算需要什么基础 编辑:程序博客网 时间:2024/06/10 01:22
复杂,但是TC就简单多了
以前发誓再也不用TC了,这也遂了我的心了,不用TC以后用VC,VC中可以导入TC库嘛,岂不是爽哉。
其实TC中有些东西可以学学,比如说异或技术,拉屏技术,这些东西在游戏中用到了,不管是过去的怀旧经典游戏,
还是现在花样百出的3D游戏
TC让我知道有显存这回事,只要你改变显存中某个单元的值,屏幕上的图像就会发生变化,只是你不察觉而已。
#include <stdio.h>
#include "graphics.h"
#include <conio.h>
#include <math.h>
//--------------------------------------------------------------------------------------
//以(orgin_x, origin_y)为圆点,按照arc角度旋转,放大mutiple倍, 以color为颜色画一个星状图
//该星状图的函数为
//x = cos(s) * cos(s) * cos(s)
//y = sin(s) * sin(s) * sin(s)
//--------------------------------------------------------------------------------------
void DrawStar(double origin_x, double origin_y, double arc, int mutiple, size_t color);
//--------------------------------------------------------------------------------------
//获取坐标系中的某点
//--------------------------------------------------------------------------------------
int GetQuardrand(double x, double y);
int main()
{
int x_center, y_center;
double beg = 0;
initgraph(-1, -1);//初始化屏幕大小,参数分别表示屏幕的高和宽,(-1, -1)表示全屏
//-------------获取屏幕的中点位置----------------
x_center = getmaxx() / 2;
y_center = getmaxy()/ 2;
//----------------------------------------------
//---------------判断有无按键,按键结束-------------------
while(!kbhit())
{
//循环设置角度(0-2pi)
for(beg = 0; beg <= 2.0 && !kbhit(); beg += 0.01)
{
//画一个某个角度上的星状图
DrawStar(x_center, y_center, beg * PI, y_center, WHITE);
//DrawStar(x_center, y_center, (2 - beg) * PI, y_center, WHITE);//这个可以反向旋转
delay(50);//延迟50毫秒
cleardevice();//清屏(VC中TC库居然不能用异或技术,遗憾啊,只见屏幕一闪一闪,心烦
}
}
closegraph();//关闭图形设备
return 0;
}
void DrawStar(double origin_x, double origin_y, double arc, int mutiple, size_t color)
{
double beg = 0, x, y, cosValue, sinValue, distance, interAngle;
int n;
//从(0-2pi)旋转,获取各个角度上的点,(记住beg并不是某个点到原点的射线与X轴的夹角)
for(;beg < 2.0; beg += 0.01)
{
//------------获取某点的X坐标-----------------------
cosValue = cos(PI * beg);
x = mutiple * cosValue * cosValue * cosValue;
//-------------------------------------------
//------------获取某点Y的坐标------------------------
sinValue = sin(PI * beg);
y = mutiple * sinValue * sinValue * sinValue;
//---------------------------------------------------
//------------(x, y)到原点的距离---------------------
distance = sqrt(x * x + y * y);
//---------------------------------------------------
//------------(x, y)所在坐标的象限-------------------
n = GetQuardrand(x, y);
//---------------------------------------------------
//-----------获取某个点到原点的射线与X轴的夹角-------
switch(n)
{
case 1://一象限
interAngle = asin(y / distance);
break;
case 2://二象限
interAngle = PI - asin(y / distance);
break;
case 3://三象限
interAngle = PI - asin(y / distance);
break;
case 4://四象限
interAngle = 2 * PI + asin(y / distance);
break;
case 5://X轴左半轴
interAngle = 0;
break;
case 6://Y轴上半轴
interAngle = 0.5 * PI;
break;
case 7://X轴右半轴
interAngle = PI;
break;
case 8://Y轴下半轴
interAngle = 1.5 * PI;
break;
}
//------------------------------------------------
//获取旋转并且平移之后的新的坐标
//此时该点的坐标为原来点的夹角加图形旋转的角度
//平移,分别把此点在向量方向上加上原点(origin_x, origin_y)的位置
x = distance * cos(interAngle + arc) + origin_x;
y = distance * sin(interAngle + arc) + origin_y;
//-----------------------------------------------
//-------------此时要有微积分的思想,任何图形都是有很微小的线段组成的,近乎点了---
if(beg == 0)
{
moveto((int)x, (int)y);//移动到第一个
}
else
{
lineto((int)x, (int)y);//以后一直画线
}
//----------------------------------------------------------------------------------
}
}
//判断(x, y)所在坐标系的位置
int GetQuardrand(double x, double y)
{
if(x > 0 && y > 0) return 1;//一象限
if(x < 0 && y > 0) return 2;//二象限
if(x < 0 && y < 0) return 3;//三象限
if(x > 0 && y < 0) return 4;//四象限
if(x > 0 && y == 0) return 5;//X左半轴
if(x == 0 && y > 0) return 6;//Y上半周
if(x < 0 && y == 0)return 7;//X右半轴
if(x == 0 && y < 0) return 8;//Y下半轴
return 0;//原点
}
- 会旋转的星状图
- 星状图
- 星状图
- 星状图
- 打印星状图
- 任务二 输出三角星状图
- OpenGL制作会旋转的矩形
- Drawable 下定义一个会旋转的ui
- C语言之For循环--1(星状图)
- C++实验四-输出星状图、三色球问题
- iOS解决拍照图片 会旋转 打开变形的问题
- IOS学习--画一个边缘渐变颜色的会自动旋转的圆
- Android工厂模式+View pager+MPAndroidChart实现的会旋转的饼状统计图
- Android 手机展示照片 会有90°旋转的问题的解决方案
- 旋转会对unity中物体的transform.forward的值产生影响
- 上传图片的时候,ios手机的图片会旋转90°
- 一些手机图片压缩处理后会出现旋转问题(三星)的解决方法
- iOS横屏竖屏旋转的方法(怕留网址会消失,直接复制内容过来了)
- 网上店铺怎样给宝贝定价
- 2011年兔年新年贺词大全/2011年兔年贺词/2011年新年公司贺词
- 二分图匹配算法总结 (by phoenixinter, Aug 2006)
- should have done/would have done
- 关于Android系统中system.img和data.img中文件系统的权限设置
- 会旋转的星状图
- C++项目中的extern "C" {}
- 2011年第一篇博文!
- 新年快乐
- Html parser 访问好友
- 基于as3.0的简单版的相册[通过面向对象的思路实现]
- 天道酬勤 - 从头细数来时路(Eygle的职业生涯)
- 委托简单例子
- Flash的简单缓动