浙江大学竺可桢学院C程序设计专题(翁恺)利用acllib库绘制函数图像

浙江大学竺可桢学院C程序设计专题(翁恺)利用acllib库绘制函数图像
该程序还提供了积分功能。
但并没有写成交互形的程序,因为这样便于调试。请同学们在提交时小改一点,也可以避免查重,谢谢大家。

#include "acllib.h"
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

#define penWidth 3
#define width 800
#define length 800
#define start 0
#define length_of_number 10
#define range 4
#define color BLACK
#define precision 1e-4

float turn1(int i);
int turn12(float num);
int turn22(float num);
void print_coordinate_axis();
void print_function(float target[], int n);
float f(int n, float target[], float x);
float jifen(float target[], int n);

int Setup()
{
    initConsole();
    int i = 0, j = 0;
    int num = 4;
    float result[ num ];
    result[0] = 1;
    result[1] = -0.8;
    result[2] = -5;
    result[3] = 5;
	initWindow("test", start, start, width, length);
    beginPaint();
    print_coordinate_axis();
    print_function(result, num);
    endPaint();
    //printf("%f\n",jifen(result, num));
	return 0;
}

void print_coordinate_axis()
{
    setPenColor(color);
    setPenWidth(1);
    setPenStyle(PEN_STYLE_SOLID);
    line(0, length / 2, width, length / 2);
    line(width / 2,0,width / 2,length);
    line(width / 2 - length_of_number / 3, length_of_number, width/2, 0);
    line(width / 2 + length_of_number / 3, length_of_number, width/2, 0);
    line(width,length/2 , width - length_of_number,length / 2- length_of_number / 3);
    line(width,length/2 , width - length_of_number,length / 2+ length_of_number / 3);
    int n;
    setTextColor(color);
    setTextSize(20);
    for(n = 1; n < 5 * 2; n++)
    {
        if( n == 5 )continue;
        line(width / 10 * n, length / 2, width / 10 * n, length/2 - length_of_number);
        line(width/2, length / 10 * n, width/2 + length_of_number, length / 10 * n);
    }
    float pace = -1 * (float)range;
    int k = 0, m = 0;
    char buffer[100];
    char c[5];
    c[4] = 0;
    for( pace, k; k < 5; k++, pace += (float)range / 5)
    {
        sprintf(buffer+4*k, "%4.2f", pace);
    }
    for( pace, k; k <= 10; k++, pace += (float)range / 5)
    {
        sprintf(buffer+4*k, "%4.1f", pace);
    }
    for( k = 0; k <= 10; k++)
    {
        for(m = 0; m < 4; m++)
        {
            c[m] = buffer[4*k + m];
        }
        if(k == 5)paintText(width/10 * k, length/2-10-length_of_number, c );
        else
        {
            paintText(width/10 * (10-k), length/2-10-length_of_number, c );
            paintText(width/2+10+length_of_number, length/10*(10-k), c );
        }
    }
    paintText(width / 2 + 10, 0, "y");
    paintText(width - 20, length / 2 - 30, "x");
}

void print_function(float target[], int n)
{
    int i, j, k;
    for(i = turn22(target[n - 2]); i <= turn22(target[n - 1]); i++)
    {
        for(j = 0; j < penWidth; j++)
        {
            for(k = 0; k < penWidth; k++)
            {
                line(i + j,  turn12(f(n, target,turn1(i))) + k, i + j + 1, turn12(f(n, target,turn1(i + 1))) + k);
            }
        }
    }
}

float f(int n, float target[], float x)
{
    int i;
    float result = 0;
    for(i = n - 3; i >= 0; i--)
    {
        result += target[n - i - 3] * pow(x, i);
    }
    return result;
}

float turn1(int i)
{
    int n = i - width / 2;
    float num = (float)n / width * 2 * range;
    return num;
}

int turn12(float num)
{
    float n = num * length / 2 / range;
    int i = length / 2 - (int)n;
    return i;
}

int turn22(float num)
{
    float n = num * width / 2 / range;
    int i = width / 2 + (int)n;
    return i;
}

float jifen(float target[], int n)
{
    double result = 0;
    float temp = 0;
    float i = target[n - 2];
    int j;
    for ( ; i < target[n - 1]; i += precision)
    {
        temp = 0;
        for( j = 0; j <= n - 3; j++)
        {
            temp += target[j] * pow( i, n - 3 - j);
        }
        result += temp * precision;
    }
    return result;
}

效果图:
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
附件是ACLLib的全部文件,包括源代码和文档及例子程序。 ——MOOC浙江大学C程序设计进阶(翁恺老师) 在Win7或Win8上正常安装的Dev C++,无论是用的MinGW编译器还是TDM编译器都是可以正常使用ACLLib的,但是要注意以下几点: 1. 如果还在使用4.9.9.2的Dev C++,一定要升级到5以上,建议都升级到最新的5.10的版本; 2. 在新建项目的时候选择Windows Application类型; 3. 根据自己机器是32位还是64位来选择编译类型,如果是32位的机器选择MinGW32位方式,如果是64位的机器建议选择TDM的64位方式; 4. 在配置项目的时候,根据32位还是64位选择正确目录下的文件来加入: 1. 32位下,文件是: "C:/Program Files/Dev-Cpp/MinGW32/lib/libwinmm.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/libmsimg32.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/libkernel32.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/libuser32.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/libgdi32.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/libole32.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/liboleaut32.a" "C:/Program Files/Dev-Cpp/MinGW32/lib/libuuid.a" 2. 64位下,文件是: C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libwinmm.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libmsimg32.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libkernel32.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libuser32.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libgdi32.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libole32.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/liboleaut32.a C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/libuuid.a 5. 最后,如果出现“undefined reference to `TransparentBlt' ”这个错误,两个解决方案: 1. 偷懒的,打开acllib.c,找到“TransparentBlt”所在的行,把整行注释掉; 2. 打开工程配置,找到编译器选项,加入-DWINVER=0x0500。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aaapengbo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值