C语言控制台应用程序GDI绘制正弦曲线

出于本科教学的目的,需要使用C语言在Visual Studio下控制台应用程序中动态绘制曲线,在此查阅了一些资料,制作了一个绘制动态正弦曲线的Demo,大家可根据这个例子查阅GDI、GDI+手册,根据需求丰富自己的绘图程序。

#include <windows.h>//引入wingdi.h
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <conio.h>

#define PI 3.1416

#define ORIGINX 0 //曲线起点X坐标
#define ORIGINY 200 //曲线起点Y坐标
#define LENGTHX 800 //X坐标轴长度
#define LENGTHY 300 //Y坐标轴长度
#define XDATALEN 300//X坐标数据量

HDC hdc = 0;//控制台绘图设备描述句柄 HDC
HPEN hPen, hPen2;//画笔变量
HPEN hPenOld;
TCHAR title[256];//控制台程序标题
int times = 0;//绘制次数变量
double datay[XDATALEN];//曲线纵坐标数组

  //绘制清屏矩形
void ClearWind(HDC hdc)
{
 HPEN hPen;
 HBRUSH hBrush;
 hBrush = CreateSolidBrush(RGB(0, 0, 0));
 hPen = CreatePen(PS_SOLID, 0, RGB(0, 0, 0));
 SelectObject(hdc, hBrush);
 SelectObject(hdc, hPen);
 //绘制黑色矩形,范围可根据需要自行更改
 Rectangle(hdc, ORIGINX, 0, ORIGINX + LENGTHX + 1, ORIGINY + LENGTHY + 1);
}

int main()
{
 //获取控制台标题
 GetConsoleTitle(title, 256);
 //先通过FindWindow函数借助标题获取窗口句柄HWND,之后再利用GetDC函数借助HWND获取HDC
 hdc = GetDC(FindWindow(0, title));
 hPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0));//设置曲线画笔,红色
 hPen2 = CreatePen(PS_SOLID, 3, RGB(0, 0, 255));//设置X轴画笔,蓝色
 hPenOld = (HPEN)SelectObject(hdc, hPen);

 while (1)
 {
 ClearWind(hdc);//清屏
 hPenOld = (HPEN)SelectObject(hdc, hPen);//选择画笔
 MoveToEx(hdc, ORIGINX, ORIGINY, NULL);//移动到起点

 for (int i = 0; i < XDATALEN; i++)
 {
 datay[i] = sin(0.1*i + times);//生成曲线纵坐标数组
 }

 for (int i = 0; i < XDATALEN; i++)
 {
 //绘制线段,连接前一个点与下一个点,第二个参数为目标点x坐标,第三个参数为y坐标
 LineTo(hdc, LENGTHX * i / XDATALEN + ORIGINX, 0.5 * LENGTHY * datay[i] + ORIGINY);
 }
 //创建绘制x轴的pen并将其选入设备上下文
 hPenOld = (HPEN)SelectObject(hdc, hPen2);//选择画笔
 MoveToEx(hdc, ORIGINX, ORIGINY, NULL);//移动到起点
 LineTo(hdc, ORIGINX + LENGTHX, ORIGINY);//绘制X轴直线
 times++;
 Sleep(100);//延时100ms

 if (kbhit())//检查是否有按键按下
 {
 if (_getch() == 0x1b)//若按下ESC键跳出循环
 {
 break;
 }
 }
 }

 DeleteObject(hPen);//删除画笔
 DeleteObject(hPen2);//删除画笔
 return 0;
}

运行结果如下所示:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言绘制余弦、正弦曲线

    绘制余弦曲线 要求:在屏幕上用"*"(星号)显示0°~360°的余弦函数cos(x)曲线.(不使用数组) 问题分析与算法设计 对一般的显示器来说,只能按行输出,即:输出第一行信息后,想能向下一行输出,不能再返回到上一行.为了获得一个周期(0°~360°)的余弦函数图形,j就必须在一行中一次输出两个"*". 为了同时得到余弦函数cos(x)图形在一行上的两个点,考虑利用cos(x)的左右对称性.将屏幕行方向定义为x,列方向定义为y.若定义图形的总宽度为62行,计算出x

  • C语言控制台绘制曲线的实现代码

    本文实例为大家分享了C语言控制台绘制曲线的具体代码,供大家参考,具体内容如下 首先我们应该要知道曲线的方程,这里以直角坐标为例 设我们曲线方程为 y = f(x) 然后我们把它化成 y - f(x) = 0的形式 在程序中,我们检测每一个(x, y)位置,只要满足 y - f(x) = 0我们就画出这个点,反之就用空格填充 而在实际中为了减小误差,只要 | y - f(x) | < exp, 其中exp是一个误差范围,取10^-5就可以了 但是还是因为误差,只画曲线的轮廓的话,看起来就不太连续,

  • C++开发绘制正弦曲线的方法

    本文实例为大家分享了C++绘制正弦曲线的具体代码,供大家参考,具体内容如下 通过OnDraw函数绘制图形 过程为先绘制两个坐标轴,再绘制正弦曲线的方法.其中将曲线分解为660个像素点,让其看起来更像"曲线" void CMFCApplication3View::OnDraw(CDC* pDC) { CMFCApplication3Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; CPen cpen, pe

  • C语言控制台应用程序GDI绘制正弦曲线

    出于本科教学的目的,需要使用C语言在Visual Studio下控制台应用程序中动态绘制曲线,在此查阅了一些资料,制作了一个绘制动态正弦曲线的Demo,大家可根据这个例子查阅GDI.GDI+手册,根据需求丰富自己的绘图程序. #include <windows.h>//引入wingdi.h #include <stdio.h> #include <math.h> #include <time.h> #include <conio.h> #defi

  • 利用C语言编辑画图程序的实现方法(推荐)

    不知道大家在进行开发县级电网调度自动化系统的时候,是否都会遇到一个问题就是:要绘制一个电力系统一次接线图.大家都应该知道其实电力系统的一次接线图是较为复杂的,如果想要使用一般的编程方法来进行绘制的话,基本上就是行不通的.那么我们应该怎样才可以更加的高效直接呢?今天小编就会给大家介绍一个方法,那就是:利用C语言编辑画图程序的实现方法.希望这篇教程对于大家有所帮助. 一.实现方法 在教程开始之前,小编先为大家介绍一下在编程程序里面早已定义了几个特殊按钮.为什么小编要为大家介绍这几个特殊按钮呢?那是因

  • 深入C# winform清除由GDI绘制出来的所有线条或图形的解决方法

    在C#winform应用程序中,可以用GDI绘制出线条或图形.1.在主窗体上绘制线条或图形 复制代码 代码如下: using (Graphics g = this.CreateGraphics())      {            g.DrawLine(Pens.Blue, new Point(10, 10), new Point(100, 100));      } 2.在指定的容器上绘制线条或图形,如在panel1上绘制 复制代码 代码如下: using (Graphics g = th

  • C语言实现的程序员老黄历实例

    本文实例讲述了C语言实现的程序员老黄历.分享给大家供大家参考.具体如下: 以前看到过一个jquery程序员老黄历页面,觉得挺有创意的,自己闲着用C语言也写了一个,基本就是随机数的生成,没什么难度,大家随便看看,高手请绕过此篇,控制台程序没什么美观可言,已经尽量弄得好看点了. #include <stdio.h> #include <time.h> int random(int dayseed,int indexseed) //根据当前时间"天 "产生伪随机数.

  • 使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)

    一.VS的开发环境 首先你得安装了vs2019,然后确认下下面三个组件是否存在,如果没有要下载一下.vs2019的安装可参考visual studio2019的安装以及使用. 二.创建C#窗体应用程序 打开vs 可以直接在搜索框输入关键字进行搜索,选择 Windows 窗体应用(.NET Framework).如图. 也可以限定项目类型,所用的语言进行查找. 接下去狂点确定即可.当然可以选择改个项目存放存放的目录和项目名称. 创建好后,就进入到了这么一个界面. 在窗体右边(也可能是在左边.每个人

  • C# 创建控制台应用程序

    目录 在学习C#语言的时候,首先要学习控制台的应用程序,这样才能专注于语言的学习,减少学习的梯度,也有利于输出自己需要输出的内容.因此第一步学习C#语言时,一定要先使用控制台的应用程序的方式.所以学习本文就是一个好的开始. 先下载VS2019,然后点击创建项目: 点击下一步,就会创建一个控制台的应用程序. 这时控制台的应用程序框架就已经创建好了,只需要输入下面的代码,就可以输出一些文字: using System; using System.Collections.Generic; using

  • C语言实现烟花表白程序代码

    目录 效果图 烟花爆炸效果思路 代码 素材 总结 效果图 烟花爆炸效果思路 不能直接把烟花图片贴到窗口中,需要把烟花的像素点保存到二维数组中,以相同的半径大小把烟花输出到窗口中爆炸的位置,r从0开始,不断增大,一圈圈输出,从而达到爆炸的效果 烟花在窗口中爆炸的位置为(x,y)即烟花弹上升的最大高度 烟花圆心为(cx,cy),烟花半径为r,已知圆心和半径,求得圆上的每一个点的坐标:圆的参数方程:x=a+r*cosθ y=b+r*sinθ(θ∈ [0,2π) )  (a,b) 为圆心坐标,r 为圆半

  • C语言控制台打砖块小游戏

    本文为大家分享了C语言控制台小游戏,打砖块,供大家参考,具体内容如下 这个问题是我在领扣上面看到的一道困难问题,原题是这样的: #include "stdafx.h" #include<stdio.h> int a[10][10] = { { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 },                    { 0, 0, 1, 1, 1, 1, 0, 1, 1, 0 },                   { 0, 0, 0, 0,

  • go语言简单网络程序实例分析

    本文实例分析了go语言简单网络程序.分享给大家供大家参考.具体分析如下: 服务端代码如下: 复制代码 代码如下: package main import (     "net"     "os" ) func serve(s net.Conn) {     var buf [1024]byte     for {         n, err := s.Read(&buf)         if err != nil || n == 0 {         

随机推荐