VC画图颜色的问题求解
用VC编了个仿真程序,画曲线的那种,想改改曲线的颜色,由于以前没怎么学过VC,不知道如何改,还请高手看看,谢谢。附件发不上去,发代码.
void fff::OnPaint()
{
CPaintDC dc(this); // device context for painting
char num1[20],num2[20],num3[20],num4[20],num5[20],num6[20],num7[20],num8[20];//用以在程序显示某位置
double t=0,ts=0,tf=8.0,h=0.0001;
double n=(tf-ts)/h;
double pqian=8.5e+6,cd=0.62,a0=0.4e-6;//溢流阀初始调定压力、流量系数、先导阀阀口过流面积;
double ryi1,rph=30.0/180*pi;//溢流阀1的液阻、主阀过流处的角度;
double miu=0.7;//摩擦系数,摩擦力用公式(miu*a*P)表示,a为摩擦接触面积,p为两侧压差
double ajie=180e-6;//节流口面积
// double cqian=2.5e-12,ff=40.0;//阀前液容、摩擦力;
double cqian=3.5e-11;//阀前液容;
double se=40.0,ctan=1.0/20000.0;//预紧力、弹簧刚度
double a1=139e-6,a2=129e-6,a3=135e-6,a4=284e-6;//经重新计算,主阀头部的液阻不是特别大,a1、a2在计算过程中合并到一起,
//为主阀头部面积,a3主阀台阶的阻碍面积,a4背压面积
double k[3][4],d[2];
int x=3;//开泵的数量,调程序时可调
double sf=0.08*x/60.0,ifa=0.24;//泵流量(每台泵流量为80L)、主阀惯量
double rxie=x*(31.5/7.0e-9*60);//泄漏液阻(31.5MPa每台泵泄漏13%)
double rrr=0.8e+6/(230e-3/60);//rrr为主阀管路320L,阀口全开条件下阀组损失产生的液阻,经过推导液阻与流量成正比关系
double *v2=new double[n+1];//阀前容积
double *fhe=new double[n+1];//合反力,方便计算主阀头部的压力
double *x11=new double[n+1];//阀芯位移
double *pdao=new double[n+1];//导阀压力=合反力/(a1+a2)
double *phou=new double[n+1];//阀后压力
double *liuliang=new double[n+1];//通过主阀的流量
double *yedong=new double[n+1];//液动力
double fye=0,rzhu,rsun,guoliu;//液动力,主阀开口液阻,主阀损失引起的液阻,主阀过流面积
double cd0=0.62;
// double max,max1,min1,min,eee=0;
// max=max1=min1=min=0;
double hh[4];
hh[0]=0,hh[1]=h/2,hh[2]=h/2,hh[3]=h;
double p1=pqian;//额定压力,p2;//p1、p2参考郑煤机图
double x0,x1,x2,x3,x4,x5,x6,x7,x8,x9;//显示数据用
int a;
pdao[0]=6.8e+6;//经计算,主阀刚开始动的时候主阀头部的初始压力
v2[0]=pqian*cqian;
fhe[0]=pdao[0]*(a1+a2);
x11[0]=0;
phou[0]=0;
liuliang[0]=0;
long int i,j,l,m;
for(i=0;i<n;i++)
{
if(i<5000)
{
pdao[i+1]=pdao[0];
v2[i+1]=v2[0];
fhe[i+1]=fhe[0];
x11[i+1]=x11[0];
phou[i+1]=phou[0];
liuliang[i+1]=liuliang[0];
}
// if(i==5000)
// a=1;
else if(i>=5000&i<50000)
{
if((v2[i]/cqian-0.9*p1)<0)
ryi1=1.0e+30;
if((v2[i]/cqian-0.9*p1)>0)
{
if((v2[i]/cqian-0.97*p1)<0)
ryi1=3.0*p1/(sf-p1/rxie);
}
if((v2[i]/cqian-0.97*p1)>0)
{
if((v2[i]/cqian-0.99*p1)<0)
ryi1=3.0*p1/(sf-p1/rxie)/2;
}
if((v2[i]/cqian-0.99*p1)>0)
{
if((v2[i]/cqian-0.999*p1)<0)
ryi1=5.0*p1/(sf-p1/rxie)/4;
}
if((v2[i]/cqian-0.999*p1)>0)
ryi1=p1/(sf-p1/rxie); //以上是分段计算溢流阀液阻,利用赵俊波论文P16的公式
if(x11[i]<0)
x11[i]=0;
if(x11[i]>4e-3)
{
x11[i]=4e-3;
}
if(x11[i]==4e-3)
{
pdao[i+1]=v2[i]/cqian;
} //以上为约束
d[1]=v2[i];
d[2]=x11[i];
if(v2[i]/cqian-phou[i]<0)
phou[i]=v2[i]/cqian;
yedong[i]=fye;
guoliu=x11[i]*3.14*19e-3*sin(rph);
liuliang[i+1]=cd*x11[i]*3.14*19e-3*sin(rph)*sqrt((v2[i]/cqian-phou[i])/500);
fye=1000.0*liuliang[i]*cd*cos(rph)*sqrt((v2[i]/cqian-phou[i])/500)+1000*liuliang[i]*liuliang[i]/a4;
if (fye>(liuliang[i]/0.16*60*60))
fye=liuliang[i]/0.16*60*60; //有资料显示内流失锥阀液动力是先增大,然后基本保持不变的,如果按照公式计算,
//液动力太大,此处加一个约束,使其压力不超过一个给定的数值
// x11[i+1]=cd*a0*sqrt((v2[i]/cqian-pdao[i])/500)/(a1+a2);
fhe[i+1]=fye+se+x11[i]/ctan+a3*v2[i]/cqian+phou[i]*a4+miu*3.14*19e-3*1.08e-3*pdao[i]-phou[i]*a3;
pdao[i+1]=fhe[i+1]/(a1+a2);
if(v2[i]/cqian-pdao[i]<0)
pdao[i]=v2[i]/cqian;
phou[i+1]=(liuliang[i]+cd*a0*sqrt((v2[i]/cqian-pdao[i])/500))*(liuliang[i]+cd*a0*sqrt((v2[i]/cqian-pdao[i])/500))/cd0/cd0/ajie/ajie*500;
if (x11[i]==0) rzhu=1e+20;
else
rzhu=sqrt((v2[i]/cqian-phou[i])*500)/cd/guoliu;
rsun=liuliang[i]/(230e-3/60)*rrr;
for(j=0;j<4;j++)
{
d[1]=d[1]+hh[j]*k[1][j-1];
d[2]=d[2]+hh[j]*k[2][j-1];
if(d[1]/cqian-pdao[i]<0)
pdao[i]=d[1]/cqian;
k[1][j]=sf-d[1]/cqian/ryi1-d[1]/cqian/rxie-cd*a0*sqrt((d[1]/cqian-pdao[i]))-(d[1]/cqian-phou[i])/(rzhu+rsun);
k[2][j]=cd*a0*sqrt((d[1]/cqian-pdao[i])/500)/(a1+a2);
if(d[2]<0)
d[2]=0;
if(d[2]>4.0/1000)
d[2]=4.0/1000;
}
v2[i+1]=v2[i]+h/6.0*(k[1][0]+2*k[1][1]+2*k[1][2]+k[1][3]);
x11[i+1]=x11[i]+h/6.0*(k[2][0]+2*k[2][1]+2*k[2][2]+k[2][3]);
}
else
{ //关闭程序开始,与打开过程类似
if(x11[i]<0)
x11[i]=0;
if(x11[i]>4e-3)
{
x11[i]=4e-3;
}
if(x11[i]==0)
{
pdao[i+1]=0;
}
d[1]=v2[i];
d[2]=x11[i];
if(v2[i]/cqian-phou[i]<0)
phou[i]=v2[i]/cqian;
guoliu=x11[i]*3.14*19e-3*sin(rph);
liuliang[i+1]=cd*x11[i]*3.14*19e-3*sin(rph)*sqrt((v2[i]/cqian-phou[i])/500);
fhe[i+1]=se+x11[i]/ctan+a3*v2[i]/cqian+phou[i]*a4-miu*3.14*19e-3*1.08e-3*pdao[i];
pdao[i+1]=fhe[i+1]/(a1+a2);
phou[i+1]=(liuliang[i])*(liuliang[i])/cd0/cd0/ajie/ajie*500;
if (x11[i]==0) rzhu=1e+20;
else
rzhu=sqrt((v2[i]/cqian-phou[i])*500)/cd/guoliu;
rsun=liuliang[i]/(230e-3/60)*rrr;
for(j=0;j<4;j++)
{
d[1]=d[1]+hh[j]*k[1][j-1];
d[2]=d[2]+hh[j]*k[2][j-1];
k[1][j]=sf-d[1]/cqian/ryi1-d[1]/cqian/rxie-(d[1]/cqian-phou[i])/(rzhu+rsun);
k[2][j]=-cd*a0*sqrt((pdao[i]-phou[i])/500)/(a1+a2);
if(d[2]<0)
d[2]=0;
if(d[2]>4.0/1000)
d[2]=4.0/1000;
}
v2[i+1]=v2[i]+h/6.0*(k[1][0]+2*k[1][1]+2*k[1][2]+k[1][3]);
x11[i+1]=x11[i]+h/6.0*(k[2][0]+2*k[2][1]+2*k[2][2]+k[2][3]);
} //关闭程序结束
}
// TODO: Add your message handler code here
for(i=10;(i*80)<n+10;i++)//以下为画图程序
{
double rrrr=4e-3/600;
double uuuu=31.5e+6/280;
dc.MoveTo(i,600-x11[80*(i-10)]/rrrr);
dc.LineTo(i+1,600-x11[80*(i-9)]/rrrr);
dc.MoveTo(i,600-v2[80*(i-10)]/cqian/uuuu);
dc.LineTo(i+1,600-v2[80*(i-9)]/cqian/uuuu);
dc.MoveTo(i,600-phou[80*(i-10)]/uuuu);
dc.LineTo(i+1,600-phou[80*(i-10+1)]/uuuu);
}
dc.MoveTo(10,600);
dc.LineTo(1000,600);
dc.MoveTo(10,600);
dc.LineTo(10,0);
for(i=1;i<17;i++)
{
dc.MoveTo(10+50*i,600);
dc.LineTo(10+50*i,590);
// m_Static1.SetWindowText();
}
}