君子好逑 发表于 2021-4-12 22:04:25

画函数图像

有大佬有用C语言写的画函数图像的程序吗,带坐标轴的那种。求观摩{:10_257:}

yuxijian2020 发表于 2021-4-13 08:54:02

MATLAB 编辑 讨论1 上传视频
MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室),软件主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式。
MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。

---------来自百度百科

人造人 发表于 2021-4-13 16:05:04

本帖最后由 人造人 于 2021-4-13 16:08 编辑

你不要再让我在数轴上写上数字,^_^



main.c
#include "screen.h"
#include <math.h>

double radian(double angle) {
    return angle * M_PI / 180;
}

void number_axis(screen_t *screen, size_t x, size_t y, char ch) {
    for(size_t i = 1; i < screen->height - 1; ++i)
      screen_putchar(screen, x, i, ch);
    for(size_t i = 1; i < screen->width - 1; ++i)
      screen_putchar(screen, i, y, ch);
}

void draw(screen_t *screen) {
    ssize_t offset_x = 10;
    ssize_t offset_y = screen->height / 2;
    number_axis(screen, offset_x, offset_y, 'n');
    for(size_t x = 1; x < screen->width - 1; ++x) {
      screen_putchar(screen, offset_x + x, offset_y - 15 * sin(radian(8 * x)), '0');
    }
}

int main(void) {
    screen_t *screen = screen_init(130, 41);
    screen_draw_border(screen, '#');
    draw(screen);
    screen_refresh(screen, stdout);
    screen_deinit(screen);
    return 0;
}


screen.h
#ifndef _SCREEN_H_
#define _SCREEN_H_

#include <stdio.h>
#include <stddef.h>

typedef struct {
    size_t width, height;
    char *buff;
} screen_t;

screen_t *screen_init(size_t width, size_t height);
void screen_deinit(screen_t *screen);
void screen_putchar(screen_t *screen, size_t x, size_t y, char ch);
void screen_refresh(screen_t *screen, FILE *fp);
void screen_draw_border(screen_t *screen, char ch);

#endif


screen.c
#include "screen.h"
#include <stdlib.h>
#include <string.h>

screen_t *screen_init(size_t width, size_t height) {
    screen_t *screen = malloc(sizeof(*screen));
    *screen = (screen_t){width, height, malloc(width * height)};
    memset(screen->buff, ' ', screen->width * screen->height);
    return screen;
}

void screen_deinit(screen_t *screen) {
    free(screen->buff);
    free(screen);
}

void screen_putchar(screen_t *screen, size_t x, size_t y, char ch) {
    if(x < screen->width && y < screen->height)
      screen->buff = ch;
}

void screen_refresh(screen_t *screen, FILE *fp) {
    for(size_t y = 0; y < screen->height; ++y) {
      for(size_t x = 0; x < screen->width; ++x) {
            fputc(screen->buff, fp);
      }
      fputc('\n', fp);
    }
}

void screen_draw_border(screen_t *screen, char ch) {
    for(size_t y = 0; y < screen->height; ++y) {
      for(size_t x = 0; x < screen->width; ++x) {
            if(y == 0 || x == 0 || y == screen->height - 1 || x == screen->width - 1)
                screen_putchar(screen, x, y, ch);
      }
    }
}

君子好逑 发表于 2021-4-16 15:56:30

本帖最后由 君子好逑 于 2021-4-16 15:57 编辑

人造人 发表于 2021-4-13 16:05
你不要再让我在数轴上写上数字,^_^




大佬,有报错{:10_266:} {:10_266:} {:10_266:}

君子好逑 发表于 2021-4-16 15:58:33

yuxijian2020 发表于 2021-4-13 08:54
MATLAB 编辑 讨论1 上传视频
MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深 ...

呃,这课的老师就是不让用matlab,我也很麻

人造人 发表于 2021-4-16 18:03:37

君子好逑 发表于 2021-4-16 15:56
大佬,有报错

说好的C语言了,你用的C++编译器肯定报错,试试这个

#include "screen.h"
#include <stdlib.h>
#include <string.h>

screen_t *screen_init(size_t width, size_t height) {
    screen_t *screen = (screen_t *)malloc(sizeof(*screen));
    *screen = (screen_t){width, height, (char *)malloc(width * height)};
    memset(screen->buff, ' ', screen->width * screen->height);
    return screen;
}

void screen_deinit(screen_t *screen) {
    free(screen->buff);
    free(screen);
}

void screen_putchar(screen_t *screen, size_t x, size_t y, char ch) {
    if(x < screen->width && y < screen->height)
      screen->buff = ch;
}

void screen_refresh(screen_t *screen, FILE *fp) {
    for(size_t y = 0; y < screen->height; ++y) {
      for(size_t x = 0; x < screen->width; ++x) {
            fputc(screen->buff, fp);
      }
      fputc('\n', fp);
    }
}

void screen_draw_border(screen_t *screen, char ch) {
    for(size_t y = 0; y < screen->height; ++y) {
      for(size_t x = 0; x < screen->width; ++x) {
            if(y == 0 || x == 0 || y == screen->height - 1 || x == screen->width - 1)
                screen_putchar(screen, x, y, ch);
      }
    }
}

君子好逑 发表于 2021-4-16 23:22:40

人造人 发表于 2021-4-16 18:03
说好的C语言了,你用的C++编译器肯定报错,试试这个

大佬,你那个背景图怎们弄的
{:10_256:}{:10_256:}{:10_256:}
我的黑不溜秋的,好羡慕啊

人造人 发表于 2021-4-17 00:35:31

君子好逑 发表于 2021-4-16 23:22
大佬,你那个背景图怎们弄的

我的黑不溜秋的,好羡慕啊

archlinux + i3wm
^_^
页: [1]
查看完整版本: 画函数图像