通过画100个半径一次增加的同心圆,并且颜色与应力值对应,达到应力云图的效果
//开始画图,
float rr = 0;//画圆输入半径必须是float数值形式
int red = 100; //rgb里面的红,初始值任意
int green = 100; //rgb里面的绿
int blue = 100; //rgb里面的蓝
double stress = 0;
Graphics gr = panel5.CreateGraphics(); //在panel5上画应力云图
int xr = panel5.Width * 3 / 5; 定义作画开始的坐标
int yr = panel5.Height / 2;
for (int i = 1; i < 100; i++) //i的初始值决定内径的大小
{
stress = arr_Sigmar[i]; //arr_Sigmar用来存放100个内径值对应的应力值,事先算好存进去
stress = (stress - minr) / (maxr - minr); //计算应力值占总的应力长度百分比,用来决定圆环的颜色
rr = (float)(r2 + (i - 1) * h); //
rr = rr * 350 / 1000; //控制图像大小
if (0.8 <= stress & stress <= 1) //1鲜红
{
red = 255;
green = 0;
blue = 0;
}
else if (0.7 < stress & stress <= 0.8)//2胡萝卜色
{
red = 237;
green = 145;
blue = 33;
}
else if (0.6 < stress & stress <= 0.7)//3黄色
{
red = 255;
green = 255;
blue = 0;
}
else if (0.5 < stress & stress <= 0.6)//4黄绿色
{
red = 127;
green = 255;
blue = 0;
}
else if (0.4 < stress & stress <= 0.5)//5绿色
{
red = 0;
green = 255;
blue = 0;
}
else if (0.3 < stress & stress <= 0.4)//6碧绿色
{
red = 64;
green = 224;
blue = 208;
}
else if (0.2 < stress & stress <= 0.3)//7青色
{
red = 0;
green = 255;
blue = 255;
}
else if (0.1 < stress & stress <= 0.2)//8钴色
{
red = 30;
green = 144;
blue = 255;
}
else if (0 < stress & stress <= 0.1)//9蓝色
{
red = 0;
green = 0;
blue = 255;
}
else if (1 < stress & stress < 0)
{
MessageBox.Show("应力值不在取色范围");
break;
}
Color mycolor = Color.FromArgb(255, red, green, blue);
Pen p2 = new Pen(mycolor, 4);
gr.DrawEllipse(p2, xr - 2 * rr, yr - 2 * rr, rr * 4, rr * 4); //每次的圆半径为i*2n,则坐标值必须为x-n*i,这样才能保证是同心圆
}
gr.Dispose();