首页 > 其他分享 >你好,复变函数2.0

你好,复变函数2.0

时间:2024-06-22 16:30:54浏览次数:15  
标签:1024 int top stack ++ str 2.0 复变 你好

 

 第一行:0 或 1

 第二行:(空格)+函数(后缀)

#pragma warning(disable:4996)
#include <easyx.h>
#include <stdio.h>
#include <math.h>
#define PI 3.141592653589793
#define E  2.718281828459045
#define K  (1.0 / 256.0)
#define K_1 256.0
struct C {
	double i;
	double r;
	C operator = (C n) {
		i = n.i; r = n.r;
		return C({ i, r });
	}
	C operator + (C n) {
		return C({ i + n.i, r + n.r });
	}
	C operator - (C n) {
		return C({ i - n.i, r - n.r });
	}
	C operator * (C n) {
		return C({ r * n.i + i * n.r, r * n.r - i * n.i});
	}
	C operator / (C n) {
		return C({
			(i * n.r - r * n.i) / (n.i * n.i + n.r * n.r),
			(i * n.i + r * n.r) / (n.i * n.i + n.r * n.r)
		});
	}
	void print() {
		printf("%lfi%+lf", i, r);
	}
};
int top = 0;
int len = 0;
int _line;
int p[4096][2];
char str[512];
C stack[512];
void getnum(int l) {
	bool k = false;
	double x = 1.0;
	stack[top] = C({ 0, 0 });
	for (int i = l; str[i] != ' ' && str[i] != '\0'; i++) {
		if (k) x *= 10;
		if (str[i] != '.')
			stack[top] = stack[top] * C({ 0, 10 }) + C({ 0, double(str[i] - '0') });
		else k = true;
	}
	stack[top] = stack[top] / C({ 0, x });
	top++;
}
void del(C c) {
	for (int i = 0; str[i] != '\0'; i++) {
		if (str[i] == ' ') {
			i++;
			if (str[i] >= '0' && str[i] <= '9')
				getnum(i);
			if (str[i] == 'e')
				stack[top++] = C({ 0, E });
			if (str[i] == 'x')
				stack[top++] = c;
			if (str[i] == '+') {
				top--;
				stack[top - 1] = stack[top - 1] + stack[top];
			}
			if (str[i] == '-') {
				top--;
				stack[top - 1] = stack[top - 1] - stack[top];
			}
			if (str[i] == '*') {
				top--;
				stack[top - 1] = stack[top - 1] * stack[top];
			}
			if (str[i] == '/') {
				top--;
				stack[top - 1] = stack[top - 1] / stack[top];
			}
			if (str[i] == '^') {
				top--;
				if (stack[top - 1].i == 0) {
					C c;
					c.r = cos(log(pow(stack[top - 1].r, stack[top].i))) * pow(stack[top - 1].r, stack[top].r);
					c.i = sin(log(pow(stack[top - 1].r, stack[top].i)));
					stack[top - 1] = c;
				}
				else if (stack[top].i == 0) {
#define A(x, y) (sqrt((x) * (x) + (y) * (y)))
					C c;
					c.r = pow(A(stack[top - 1].i, stack[top - 1].r), stack[top].r) * cos(stack[top].r * asin(stack[top - 1].i / A(stack[top - 1].i, stack[top - 1].r)));
					c.i = pow(A(stack[top - 1].i, stack[top - 1].r), stack[top].r) * sin(stack[top].r * asin(stack[top - 1].i / A(stack[top - 1].i, stack[top - 1].r)));
					stack[top - 1] = c;
#undef A
				}
				else {
					MessageBox(NULL,L"暂不支持此运算",  L"Error", MB_OK);
				}
			}
		}
	}
	p[len][0] = 512 + int(stack[0].r * K_1 + 0.5);
	p[len][1] = 512 - int(stack[0].i * K_1 + 0.5);
	if (_line == 0)
		putpixel(p[len][0], p[len][1], RGB(0, 255, 255));
	len++;
}
int main() {
	initgraph(1024, 1024, EX_SHOWCONSOLE);
	setlinecolor(RGB(0, 255, 255));
	scanf("%d", &_line);
	getchar();
	gets_s<512>(str);
	for (int y = -1024; y < 1024; y += 16) {
		len = 0;
		for (int x = -1024; x < 1024; x += 1) {
			top = 0;
			C c = { y * K, x * K };
			del(c);
		}
		if (_line == 1)
			for (int i = 0; i < len - 1; i++) {
				line(p[i][0], p[i][1], p[i + 1][0], p[i + 1][1]);
			}
	}
	for (int y = -1024; y < 1024; y += 16) {
		len = 0;
		for (int x = -1024; x < 1024; x += 1) {
			top = 0;
			C c = { x * K, y * K };
			del(c);
		}
		if (_line == 1)
			for (int i = 0; i < len - 1; i++) {
				line(p[i][0], p[i][1], p[i + 1][0], p[i + 1][1]);
			}
	}
	saveimage(L"1.jpg");
	printf("--------\n");
	getchar();
	closegraph();
}

标签:1024,int,top,stack,++,str,2.0,复变,你好
From: https://blog.csdn.net/2301_80029762/article/details/139884261

相关文章

  • 升级指南:探索CMMI2.0与3.0之间的企业变革!
    CMMI2.0和CMMI3.0对企业的要求在某些方面有所变化,主要体现在以下几个方面:CMMI2.0对企业的要求1.人员要求:硬性要求:确保企业有25名以上的技术人员和10名以上的支持人员。设立专门的人员对接CMMI评估,负责体系创立、监督执行、进程剖析和改进。2.项目要求:展示公司至少4个以上......
  • 微信对话生成器2.0版本
    微信对话生成器2.0版,这是一款革命性的通讯辅助工具,在数字通信领域带来了新的创新浪潮。这一升级版的生成器不仅囊括了从基本的文字编辑、格式调整到语音转换的多种功能,更重要的是,它提供了模拟真实对话的能力,使得用户可以更有效地规划和预演即将展开的聊天。此工具的核心在......
  • 免费福利:《经典图书推荐2.0》来
    往期文章推荐经典图书雷达和电子对抗经典书推荐1-信息时代的电子战雷达和电子对抗经典书推荐2-机载雷达导论雷达和电子对抗经典书推荐3-应用电子对抗雷达和电子对抗经典书推荐4-雷达手册雷达和电子对抗经典书推荐5-雷达信号处理基础雷达和电子对抗经典书推荐6-......
  • Ubuntu 22.04 安装MariaDB 提供本地服务
    打开终端。更新包列表:sudoaptupdate安装MariaDB服务器:sudoaptinstallmariadb-server安装完成后,运行安全安装脚本来设置密码和调整安全选项:sudomysql_secure_installationroot@seafile-server:/opt#mysql_secure_installationNOTE:RUNNING......
  • Matlab r2023a v23.2.0 解锁版安装步骤 (工程计算商业数学软件)
    前言Matlab(矩阵实验室)是全球领先的数学计算软件开发商美国MathWorks公司研发的一款面向科学与工程计算的高级语言的商业数学软件,集算法开发、数据分析、可视化和数值计算于一体的编程环境,其核心是仿真交互式矩阵计算,广泛应用于科学计算、数据分析、算法开发和绘图设计等......
  • VirtualBox Ubuntu 22.04 Server联网、与主机互联
    使用VirtualBox7.0安装了两个Ubuntu22.04Server虚拟机,想要实现:主机与虚拟机互联虚拟机之间互联,且互联的IP应为静态虚拟机可以联网解决方法每个虚拟机配置两个虚拟网卡:一个为桥接网络模式,用于联网以及与主机互联一个为仅主机模式,用于配置静态IP并实现虚拟机之间互联......
  • OAuth2.0的简单认识
    内容:结合实际平台应用,以开发者视角简单描述OAuth2.0OAuth2.0其实是一种授权机制,而且在日常的互联网环境中是非常常见的,比如一些网站或者应用,在我们选择登录时,常常会有第三方登录选项,其实这就是OAuth2.0的一种实现。官方协议流程这里直接引用官网文档流程授权码模式其实OAu......
  • IT66352: 2 IN to 1 OUT HDMI2.0 18Gb/s Re Timer Switch
    TheIT66352isaHDMI2.02INto1OUTre-timerswitchwhichsupportsmaximumsignalingrateupto6Gbps/channel. IT66352是一款HDMI2.02INto1OUT重定时器开关,支持最高6Gbps/通道的信令速率。ItiscomplianttothelatestHDMI2.0bspecification4Kx2K@50/6......
  • IT66341 : 4 IN to 1 OUT HDMI2.0 18Gb/s Switch with Audio In/Out
    TheIT66341isaHDMI2.04INto1OUTswitchwhichsupportsmaximumsignalingrateupto6Gbps/channel. IT66341是一款HDMI2.04INto1OUT交换机,支持高达6Gbps/通道的最大信令速率。ItiscomplianttothelatestHDMI2.0bspecificationandbackwardcompatib......
  • 深度解读等保2.0标准
    在数字经济时代,信息安全已成为一个不容忽视的问题,其中,等级保护机制也是一个不断演化的过程。近几年,国内发生了一次重要的变化,就是等保2.0标准的颁布和执行。文章对该协议2.0进行了详细的阐述,并对其在信息安全方面的作用及意义进行了分析。1.等保2.0标准的背景和意义《等......