24小时热门版块排行榜    

查看: 545  |  回复: 7
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

ghost118

木虫 (小有名气)

[求助] 画图 已有1人参与

刚入学,跟老板说c++还不错,计算机二级拿了个优秀,他就让我画y=x2的图形,第一次听说c++能画图啊,跪求高人指导
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cooooldog

铁杆木虫 (著名写手)

ส็็็

引用回帖:
3楼: Originally posted by ghost118 at 2014-09-17 17:35:58
哥,这个代码能直接画图么,我电脑64位的不能装vc++6.0,还有就是我c++三年都没碰了啊,学的很基础很基础的,还有就是学校图书馆还没办法借书,我发现自己真的太小白了,烦的要死啊...

这个直接把图片输出到文件; 任何C++编译器都可以; GCC, VC++2008-2013, 都可以

» 本帖已获得的红花(最新10朵)

ส็็็็็็็็็็็็็็็็็็็็
4楼2014-09-17 17:41:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 8 个回答

cooooldog

铁杆木虫 (著名写手)

ส็็็

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
xzhdty: 金币+2, 感谢参与应助 2014-09-18 06:30:46

你老板太欺负人了

画简单函数太掉优秀二级的价了;
你用下面这段代码忽悠他去:
CODE:
#include <complex>
#include <fstream>

using namespace std;

const double PI = 3.1415926535897932384626433832795;
const double E  = 2.7182818284590452353602874713527;

void SetHSV(double h, double s, double v, unsigned char color[3]) {
    double r, g, b;
    if(s==0)
        r = g = b = v;

    else {
        if(h==1) h = 0;
        double z = floor(h*6); int i = int(z);
        double f = double(h*6 - z);
        double p = v*(1-s);
        double q = v*(1-s*f);
        double t = v*(1-s*(1-f));

        switch(i){
        case 0: r=v; g=t; b=p; break;
        case 1: r=q; g=v; b=p; break;
        case 2: r=p; g=v; b=t; break;
        case 3: r=p; g=q; b=v; break;
        case 4: r=t; g=p; b=v; break;
        case 5: r=v; g=p; b=q; break;
        }
    }
    int c;
    c = int(256*r); if(c>255) c = 255; color[0] = c;
    c = int(256*g); if(c>255) c = 255; color[1] = c;
    c = int(256*b); if(c>255) c = 255; color[2] = c;
}

complex<double> fun(complex<double>& c ){
    const complex<double> i(0., 1.);
    return (pow(c,2) -1.) *pow(c -2. -i, 2) /(pow(c,2) +2. +2. *i);
}

int main(){
    const int dimx = 800; const int dimy = 800;
    const double rmi = -3; const double rma =  3;
    const double imi = -3; const double ima =  3;

    ofstream f("complex.ppm", ios::binary);
    f << "P6" << endl
      << dimx << " " << dimy << endl
      << "255" << endl;

    for(int j=0; j < dimy; ++j){
        double im = ima - (ima -imi) *j /(dimy -1);
        for(int i=0; i < dimx; ++i){               
            double re = rma -(rma -rmi) *i /(dimx -1);
            complex<double> c(re, im);
            complex<double> v = fun(c);       
            double a = arg(v);

            while(a<0) a += 2*PI; a /= 2*PI;
            double m = abs(v);
            double ranges = 0;
            double rangee = 1;

            while(m>rangee){
                ranges = rangee;
                rangee *= E;
            }

            double k   = (m-ranges)/(rangee-ranges);
            double sat = k < 0.5 ? k *2: 1 -(k -0.5) *2;
            sat = 1 - pow(1-sat, 3); sat = 0.4 + sat*0.6;

            double val = k < 0.5 ? k *2: 1 -(k -0.5) *2; val = 1 - val;
            val = 1 - pow(1-val, 3); val = 0.6 + val*0.4;

            unsigned char color[3];
            SetHSV(a,sat,val,color);
            f.write((const char*)color,3);
        }
    }
    return 0;
}

ส็็็็็็็็็็็็็็็็็็็็
2楼2014-09-17 17:20:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ghost118

木虫 (小有名气)

引用回帖:
2楼: Originally posted by cooooldog at 2014-09-17 17:20:55

你老板太欺负人了

画简单函数太掉优秀二级的价了;
你用下面这段代码忽悠他去:

#include <complex>
#include <fstream>

using namespace std;

const double PI = 3.141592653589 ...

哥,这个代码能直接画图么,我电脑64位的不能装vc++6.0,还有就是我c++三年都没碰了啊,学的很基础很基础的,还有就是学校图书馆还没办法借书,我发现自己真的太小白了,烦的要死啊
3楼2014-09-17 17:35:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ghost118

木虫 (小有名气)

送红花一朵
引用回帖:
4楼: Originally posted by cooooldog at 2014-09-17 17:41:10
这个直接把图片输出到文件; 任何C++编译器都可以; GCC, VC++2008-2013, 都可以...

我得慢慢来,一步步学,要是这个立马就搞出来,他再给我找点更复杂的活儿,我就。。。。谢啦,哥,送你一朵小红花
5楼2014-09-17 17:45:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见