C++玫瑰

</pre><pre name="code" class="cpp">////////////////////////////////////////////////////////////////////
// 程序名称:情人节的玫瑰
// 编译环境:VC6.0 / VC2010,EasyX 2011惊蛰版
// 原 作 者:西班牙程序员 Roman Cortes
// 原 程 序:(百度不让发链接)(javascript 版本)
// 移植作者:krissi <zh@easyx.cn>
// 最后修改:2012-2-13
// 注:程序中的很多精简变量名都沿用原 javascript 中的变量名。
//
#include <graphics.h>
#include <conio.h>
#include <math.h>

// 定义全局变量
int	rosesize = 500;
int	h = -250;

// 定义结构体
struct DOT
{
	double x;
	double y;
	double z;
	double r;	// 红色
	double g;	// 绿**(蓝色) 通过 r 计算
};
// 计算点
bool calc(double a, double b, double c, DOT &d)
{
	double j, n, o, w, z;

	if(c > 60)	 // 花柄
	{
		d.x = sin(a * 7) * (13 + 5 / (0.2 + pow(b * 4, 4))) - sin(b) * 50;
		d.y = b * rosesize + 50;
		d.z = 625 + cos(a * 7) * (13 + 5 / (0.2 + pow(b * 4, 4))) + b * 400;
		d.r = a * 1 - b / 2;
		d.g = a;
	return true;
	} 

	double A = a * 2 - 1;
	double B = b * 2 - 1;
	if(A * A + B * B < 1)
	{
		if(c > 37)	 // 叶
		{
			j = (int(c) & 1);
			n = j ? 6 : 4;
			o = 0.5 / (a + 0.01) + cos(b * 125) * 3 - a * 300;
			w = b * h; 

			d.x = o * cos(n) + w * sin(n) + j * 610 - 390;
			d.y = o * sin(n) - w * cos(n) + 550 - j * 350;
			d.z = 1180 + cos(B + A) * 99 - j * 300;
			d.r = 0.4 - a * 0.1 + pow(1 - B * B, -h * 6) * 0.15 - a * b * 0.4 + cos(a + b) / 5 + pow(cos((o * (a + 1) + (B > 0 ? w : -w)) / 25), 30) * 0.1 * (1 - B * B);
			d.g = o / 1000 + 0.7 - o * w * 0.000003;
			return true;
		}
		if(c > 32)	 // 花萼
		{
			c = c * 1.16 - 0.15;
			o = a * 45 - 20;
			w = b * b * h;
			z = o * sin(c) + w * cos(c) + 620;

			d.x = o * cos(c) - w * sin(c);
			d.y = 28 + cos(B * 0.5) * 99 - b * b * b * 60 - z / 2 - h;
			d.z = z;
			d.r = (b * b * 0.3 + pow((1 - (A * A)), 7) * 0.15 + 0.3) * b;
			d.g = b * 0.7;
			return true;
		} 

		// 花
		o = A * (2 - b) * (80 - c * 2);
		w = 99 - cos(A) * 120 - cos(b) * (-h - c * 4.9) + cos(pow(1 - b, 7)) * 50 + c * 2;
		z = o * sin(c) + w * cos(c) + 700;

		d.x = o * cos(c) - w * sin(c);
		d.y = B * 99 - cos(pow(b, 7)) * 50 - c / 3 - z / 1.35 + 450;
		d.z = z;
		d.r = (1 - b / 1.2) * 0.9 + a * 0.1;
		d.g = pow((1 - b), 20) / 4 + 0.05;
		return true;
	}
		return false;
}
// 主函数
void main()
{
	// 定义变量
	short	*zBuffer;
	int	 x, y, z, zBufferIndex;
	DOT	 dot;

	// 初始化
	initgraph(640, 480);	 // 创建绘图窗口
	setbkcolor(WHITE);	 // 设置背景色为白色
	cleardevice();	 // 清屏

	// 初始化 z-buffer
	zBuffer = new short[rosesize * rosesize];
	memset(zBuffer, 0, sizeof(short) * rosesize * rosesize);

	for(int j = 0; j < 2000 && !_kbhit(); j++)	// 按任意键退出
	{
		for(int i = 0; i < 10000; i++)	 // 减少是否有按键的判断
			if(calc(double(rand()) / RAND_MAX, double(rand()) / RAND_MAX, rand() % 46 / 0.74, dot))
			{
				z = int(dot.z + 0.5);
				x = int(dot.x * rosesize / z - h + 0.5);
				y = int(dot.y * rosesize / z - h + 0.5);
				if (y >= rosesize) continue;

				zBufferIndex = y * rosesize + x;

				if(!zBuffer[zBufferIndex] || zBuffer[zBufferIndex] > z)
				{
					zBuffer[zBufferIndex] = z;
					// 画点
					int r = ~int((dot.r * h));	 if (r < 0) r = 0;	if (r > 255) r = 255;
					int g = ~int((dot.g * h));	 if (g < 0) g = 0;	if (g > 255) g = 255;
					int b = ~int((dot.r * dot.r * -80));	if (b < 0) b = 0;	if (b > 255) b = 255;
					putpixel(x + 50, y - 20, RGB(r, g, b));
				}
			}

			Sleep(1);
	}

	// 退出
	delete []zBuffer;
	_getch();
	closegraph();
}
时间: 2024-09-16 05:20:16

C++玫瑰的相关文章

Photoshop合成一朵个性水玫瑰

  Photoshop合成一朵个性水玫瑰.             最终效果 1.打开素材,这张图的合成思路是制作一朵出水的花.我做的第一件事是除去那个将被替代的部分.这需要很大的耐心,因为有许多轮廓和边缘需要处理. 2.在这个合成的水的部分,找一张水滴素材.把需要的部分抠出来,边缘稍微扩大一下. 3.这一步是把抠出来的水的部分粘贴到剪切后的玫瑰图片后.我修剪了多余的边缘,剩下的边缘影藏在背景层后.

PS合成玫瑰纷飞的美女插画

  [思路要点]:使用喷溅笔刷把人物头发做成喷溅的效果,并添加旋转形态的素材 让画面有旋转的感觉,玫瑰花和花瓣的衬托让画面有玫瑰纷飞的效果. 加上后期的润色打造有气氛的插画效果 [软件版本]:Photoshop CS6 (标准版) [教程类型]:合成 [主要工具]:画笔.变形工具 [图层滤镜]:高斯模糊.动感模糊 [图层效果]:蒙板.剪切蒙板 [文件层数]:约30层 [教程作者]:Kamdy229 [作品效果]: 1.新建一个 1200×1000画布,新建一个图层 渐变色标设置为 颜色 #bab

Photoshop打造一朵创意的水玫瑰

水玫瑰的制作思路比较简单:用水纹素材替换玫瑰的花瓣.不过实际制作过程要复杂很多,水纹需要经过特殊处理,跟花瓣要融合,不同花瓣部分的水纹要有层次感,处理的时候一定要细心. 原图 最终效果 1.打开素材,这张图的合成思路是制作一朵出水的花.我做的第一件事是除去那个将被替代的部分.这需要很大的耐心,因为有许多轮廓和边缘需要处理. 2.在这个合成的水的部分,找一张水滴素材.把需要的部分抠出来,边缘稍微扩大一下. 分类: PS图片处理

Photoshop制作烈焰中的玫瑰效果

火焰玫瑰跟火焰字等的制作方法类似,过程:把主体抠出来,并把颜色调成橙黄色,高光部分需要单独加强:然后用火焰及烟雾素材叠加到玫瑰上面增加火焰效果:局部燃烧完成的部分还需要简单细化处理. 最终效果 1.新建个PSD文件,将玫瑰的素材图片导入内部,并且栅格化,通过魔术棒工具去除白色背景如图. 2.营造一下燃烧的气氛,新建个图层通过画笔绘制些火的颜色,将火焰的素材导入,图层混合模式改成滤色. [1] [2] [3] [4] [5]  下一页

Photoshop巧绘神秘玫瑰洞穴

设计灵感: 在欢乐岛的大森林深处,有一个神秘洞穴,洞穴里珍藏着一颗美丽的夜明珠,寻找到这一颗夜明珠的幸运儿可以获得欢乐岛主赠送的一份珍贵礼物.但是,许多年来,无数的寻宝者陆续进入了那片森林,全都无功而返. 先贴效果图,喜欢的朋友跟过来.   天极设计在线:这个层叠的效果主要先是用云彩.晶格化滤镜得到明暗变化的效果,然后再应用"滤镜-杂色-中间值"命令,得到类似按地形的高度排列等高线的阶梯效果,再加上明暗处理,模拟出玫瑰花瓣一样的洞穴效果. 1.新建文档 650×450像素,并将背景填充

PS打造漂亮的玫瑰吉他

photoshop打造漂亮的玫瑰吉他,以下是教程. 1.新建文档,将吉它素材导入 2.将叶子素材拖入,ctrl+T调整大小,ctrl+J复制,再ctrl+T调整大小位置,直至满意 3.叶子调整满意后将这三个图层合并,然后ctrl+J复制,编辑-变换-水平翻转后放至吉它右侧 4.完成后将这两个叶子图层合并,放至吉它图层下一层 5.再次拖入叶子素材,如法炮制出其它的叶子以及放置好玫瑰的位置,注意各图层的位置关系(见图) 6.制作被吉它遮挡部位叶子的阴影.首先在叶子图层上方新建图层,选择画笔工具(硬度

用3Ds Max打造情人节漂亮的金色玫瑰

情人节,又叫圣瓦伦丁节或圣华伦泰节(St. Valentine's Day),即每年的2月14日,是西方的传统 节日之一.男女在这一天互送巧克力.贺卡和花,用以表达爱意或友好,现已成为欧美各国青年人喜爱的 节日.大概这世上有多少情人就有多少关于情人节来历的诠释吧.和中国人现在用近乎狂热的热情过起了 圣诞节一样,情人节也已经悄悄渗透到了无数年轻人的心目当中,成为中国传统节日之外的又一个重要节 日.今天教大家打造情人节的金色玫瑰. 效果图: 效果图 1.画两条线,一条长的做为花瓣形状线,一条短的做为

Photoshop绘制甜蜜的心形玫瑰

  Photoshop绘制甜蜜的心形玫瑰 最终效果如下. 1.新建一个800 * 600像素的文档,选择渐变工具,颜色设置如图1,由中心向边角拉出图2所示的径向渐变作为背景. 图1 图2 2.新建一个组,先来制作左半部分,需要完成的效果如下图.心形是对称图形,右半部分可以直接复制. 图3 3.在组里新建一个图层,用钢笔勾出底部的一片花瓣,如图4.转为选区后填充红色,效果如图5. 图4 图5

PhotoShop合成麦田里美女手持玫瑰闻香的效果教程

ps教程学习如何用photoshop把美女与背景有机的合成起来,美女手拿玫瑰,好像在想念远方的老公或其它异性,主要用到了草丛笔刷.调整层和蒙版等. 效果图: 首先打开美女图片(素材下载). 用钢笔抠出拖入背景图片中,头发部分我们后期处理. 载入草丛笔刷,把颜色动态和传递去掉勾选,这2个选项可能会造成前后背景色反复更替. 分类: PS合成图片教程

HTML5 Canvas实现玫瑰曲线和心形图案的代码实例

 效果图: 提示:把代码复制到一个html文件中并保存,直接打开即可看到效果. 实现代码:   代码如下: <!DOCTYPE html> <html> <head> <meta charset = "gbk"> <title>HTML5 Demo</title> <style type="text/css"> #apDiv1 { position:absolute; width:1