放射生物学小作业(细胞存活曲线LQ公式的绘制)

--------------------------------------------------------------------------------------------------------------------
放射生物学小作业(细胞存活曲线LQ公式的绘制)
题目描述
01.射线对生物体的损伤是随机的,细胞经过射线照射后大多数死亡,也有小部分细胞存活.
02.根据不同的剂量和不同的生存率绘制出来的曲线,即为细胞存活曲线.
03.细胞的生存曲线是一条直线,说明细胞对射线敏感的表现,也就是说,细胞DNA被一次击中就发生死亡.
04.大多数细胞在低剂量区时,存活曲线有一个肩区,当剂量较大时,才成直线.
05.因此生存曲线是一个二次曲线,我们常用线性二次方程来描述.
06.20世纪80年代Thames和Bentze提出的LQ模型,不仅适用于肿瘤,也适应于早反应和晚反应组织.
07.线性二次方程(LQ公式)(αβ公式)的表达形式
08.S=e^[-(αD+βDD)]
09.其中S-存活比例(%)
10.     e-自然对数,e=2.718281828
11.     D-分次照射的剂量(Gy).
12.     α,β-系数.
13.上面的公式也可写成S={e^[-(αD]}{e^[-(βDD)]}=S(α)S(β)
14.S(α)-α型细胞杀伤,某一剂量照射下的直接致死效应,生物效应与剂量成正比,线性效应.
15.S(β)-β型细胞杀伤,某一剂量照射下的间接致死效应,生物效应与剂量平方成正比,曲线效应.
程序编制要求
1.系数α,β交互读取.
2.分次照射的剂量D交互读取.
3.计算线性效应+曲线效应=总效应
5.绘制照射剂量从(0~20Gy)变化时,细胞存活率的变化曲线.
--------------------------------------------------------------------------------------------------------------------
#include graphics.h包含Easyx模拟TC的BGI绘图库头文件
#include math.h包含数学运算头文件
#define DD 40宏定义标题边框距离
#define DW 10宏定义宽度边框距离
#define DH 10宏定义高度边框距离
#define DC 200宏定义控件区域宽度
#define nx 10宏定义x轴刻度数量
#define ny 10宏定义y轴刻度数量
#define PI 3.1415926宏定义圆周率
#define TA 0最低剂量
#define TB 20最高剂量
#define c1 RGB(38,47,86)宏定义辅助线颜色1
#define c2 RGB(38,47,86)宏定义辅助线颜色2
#define c3 RGB(255,255,255)宏定义文字及边框颜色
#define cc1 RGB(255,0,0)宏定义曲线颜色1(红色)
#define cc2 RGB(0,0,255)宏定义曲线颜色2(蓝色)
#define cc3 RGB(255,255,0)宏定义曲线颜色3(黄色)
定义结构体-------------------------------------------------------------------------------------------------------
typedef struct points
{
	double x,y;定义双精度变量
}DPOINT;结束结构体
定义全局变量-----------------------------------------------------------------------------------------------------
int W = GetSystemMetrics(SM_CXSCREEN);获取整个屏幕右下角X坐标
int H = GetSystemMetrics(SM_CYSCREEN);屏幕Y坐标 	
char is1[20]=0.45;预定义1.系数α
char is2[20]=0.045;2.系数β
char is3[20]=5;3.放射剂量(Gy)
char is4[20],is5[20],is6[20],is7[20];定义字符数组(存储字符串)
double d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11;定义双精度变量(存储计算值)
函数声明---------------------------------------------------------------------------------------------------------
void sub_frame();绘制框架子函数
void sub_calculate();计算数据子函数
主函数-----------------------------------------------------------------------------------------------------------
void main()
{
	sub_frame();绘图初始化
	MOUSEMSG m;定义鼠标消息 
	while(true)循环
	{
		m=GetMouseMsg();获取一条鼠标消息 
		switch(m.uMsg)根据获得的消息选择分支
		{
		case WM_LBUTTONDOWN鼠标左键单击时判断数据输入
			{
				判断鼠标位置是否在指定的控件区域
				A.获取原始数据(横坐标在输入区域时输入数据)-------------------------------
				if(m.x=W-DW-DC && m.x=W-DW)
				{
					1.系数α-----------------------------------------------------
					if(m.y=H-DH-1636+1 && m.y=H-DH-1536-1)
					{
						InputBox(is1,9,请输入数据);读入数据
						setfillcolor(BLACK);
						fillrectangle(W-DW-DC+DC2+10,H-DH-1636+1,W-DW,H-DH-1536);
						outtextxy(W-DW-DC+DC2+15,H-DH-1636+15,is1);写控件字符串
					}结束if
					2.系数β-----------------------------------------------------
					if(m.y=H-DH-1536+1 && m.y=H-DH-1436-1)
					{
						InputBox(is2,9,请输入数据);读入数据
						setfillcolor(BLACK);
						fillrectangle(W-DW-DC+DC2+10,H-DH-1536+1,W-DW,H-DH-1436);
						outtextxy(W-DW-DC+DC2+15,H-DH-1536+15,is2);写控件字符串
					}结束if
					3.放射剂量(Gy)-----------------------------------------------
					if(m.y=H-DH-1436+1 && m.y=H-DH-1336-1)
					{
						InputBox(is3,9,请输入数据);读入数据
						setfillcolor(BLACK);
						fillrectangle(W-DW-DC+DC2+10,H-DH-1436+1,W-DW,H-DH-1336);
						outtextxy(W-DW-DC+DC2+15,H-DH-1436+15,is3);写控件字符串
					}结束if					
				}结束if(横坐标在输入区域时输入数据)
				sub_frame();重绘框架
				B.计算并绘图(横坐标在绘图区域时计算绘图)---------------------------------
				if(m.x=DW && m.x=W-DW-DC)
				{
					sub_calculate();调用计算绘图函数
				}结束if
				break;
			}结束case(结束鼠标左键单击事件消息处理)
		case WM_RBUTTONDOWN鼠标移动的时候画个空心的圆
			return;返回while
		}结束switch(结束鼠标消息)
	}结束while
}结束主函数
绘制框架子函数
void sub_frame()
{
	1.全屏效果---------------------------------------------------------------------------
	initgraph(W,H);初始化绘图窗口
	HWND hWnd = GetHWnd();获取窗口句柄
	LONG style = GetWindowLong(hWnd,-16);获得窗口风格
	style = style & ~WS_CAPTION & ~WS_SIZEBOX; 窗口全屏显示且不可改变大小
	SetWindowLong(hWnd,-16,style);设置窗口风格
	SetWindowPos(hWnd, NULL,0,0,W,H,SWP_NOZORDER);改变窗口位置,尺寸和Z序
	ShowCursor(FALSE);显示时隐藏鼠标
	------------------------------------------------------------------------------------
	2.绘制工作区边框
	setcolor(c3);
	rectangle(DW,DD,W-DW,H-DH);外边框
	rectangle(W-DW-DC,DD,W-DW,H-DH);控件区域边框
	3.绘制工作区坐标线
	画x轴刻度标线及文字---------------------------
	double value;定义双精度变量
	char stt[10];定义字符数组
	double xstep=(W-2DW-DC)(1.0nx);x方向步长(nx个刻度)(对应的绘图单位)
	double ystep=(H-DH-DD)(1.0ny);y方向步长(ny个刻度)(对应的绘图单位)
	for(int i=0;i=nx;i++)
	{
		setcolor(c1);竖直辅助线颜色
		line(DW+xstepi,H-DH,DW+xstepi,DD);画竖直小刻度线
		setcolor(c3);文字颜色
		value=TA+xstepi(TB-TA)(W-2DW-DC);所在的刻度数值
		gcvt(value,5,stt);将浮点数value转换为字符串stt
		outtextxy(DW+xstepi-10,H-DH-20,stt);在规定的位置放置字符串
	}结束for
	画y轴刻度标线及文字---------------------------
	for(i=0;i=ny;i++)
	{
		setcolor(c2);水平辅助线颜色
		line(DW,DD+ystepi,W-DW-DC,DD+ystepi);画水平小刻度线
		setcolor(c3);文字颜色
		value=ystep(ny-i)100.0(H-DH-DD);所在的刻度数值
		gcvt(value,3,stt);将浮点数value转换为字符串stt
		outtextxy(DW+15,DD+ystepi+5,stt);在规定的位置放置字符串
	}结束for
	4.重新绘制工作区边框
	setcolor(c3);
	rectangle(DW,DD,W-DW,H-DH);外边框
	rectangle(W-DW-DC,DD,W-DW,H-DH);控件区域边框
	5.输出标题
	setfont(16,0,黑体);
	outtextxy(5,10,放射生物学小作业_细胞存活曲线_(LQ公式)(αβ公式));
	6.输出简单说明
	RECT r={W-DW-DC+10,DD+10,W-DW-10,H-DH-10};
	setfont(12,0,宋体);
	drawtext(放射生物学小作业n n 
				细胞存活曲线的绘制(LQ公式)
				
				nn
				操作说明nn
				鼠标左键   数据输入n
				鼠标右键   退出程序n
			n
			1~3为输入数据   4~6为计算数据n
			nn
			nn
			
			n, &r, DT_WORDBREAK);
	7.调整说明文字下面的矩形控件
	int c_h=36;定义控件高度
	int c_x1=W-DW-DC,c_x2=W-DW;控件左右x坐标
	int c_y1=H-DH;第1个控件下y坐标
	for(i=1;i=16;i++)
	{
		rectangle(c_x1,c_y1,c_x2,c_y1-c_h);
		c_y1=c_y1-c_h;
	}结束for
	8.绘制控件说明文字
	outtextxy(c_x1+10,H-DH-16c_h+15,1.系数α);输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-15c_h+15,2.系数β);输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-14c_h+15,3.放射剂量(Gy));输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-13c_h+15,4.线性效应(%));输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-12c_h+15,5.曲线效应(%));输出字符串模拟控件文字
	outtextxy(c_x1+10,H-DH-11c_h+15,6.叠加效应(%));输出字符串模拟控件文字
	8.初始化原始数据
	outtextxy(W-DW-DC+DC2+15,H-DH-1636+15,is1);写控件字符串
	outtextxy(W-DW-DC+DC2+15,H-DH-1536+15,is2);写控件字符串
	outtextxy(W-DW-DC+DC2+15,H-DH-1436+15,is3);写控件字符串
}结束子程序
计算数据子函数
void sub_calculate()
{
	1.原始数据转化为双精度数
	d1=atof(is1);1.系数α
	d2=atof(is2);2.系数β
	d3=atof(is3);3.放射剂量(Gy)
	2.根据数据计算要求项目---------------------------------------------------------------------------
	d4=100.0exp(0.0-d1d3);4.线性效应(%)
	d5=100.0exp(0.0-d2d3d3);5.曲线效应(%)
	d6=d4d5100.0;6.叠加效应(%)
	3.将计算结果转化为字符串--------------------------------------------------------------------------
	gcvt(d4,6,is4);
	gcvt(d5,6,is5);
	gcvt(d6,6,is6);
	4.将字符串写入控件中
	setfillcolor(BLACK);
	------------------------------------------------------------
	fillrectangle(W-DW-DC+DC2+10,H-DH-1336+1,W-DW,H-DH-1236);
	outtextxy(W-DW-DC+DC2+15,H-DH-1336+15,is4);写控件字符串
	------------------------------------------------------------
	fillrectangle(W-DW-DC+DC2+10,H-DH-1236+1,W-DW,H-DH-1136);
	outtextxy(W-DW-DC+DC2+15,H-DH-1236+15,is5);写控件字符串
	------------------------------------------------------------
	fillrectangle(W-DW-DC+DC2+10,H-DH-1136+1,W-DW,H-DH-1036);
	outtextxy(W-DW-DC+DC2+15,H-DH-1136+15,is6);写控件字符串
	------------------------------------------------------------
	5.绘制说明文字
	------------------------------------------------------------
	setcolor(cc1);说明曲线颜色
	line(W-DW-DC+10,H-DH-936+18,W-DW-DC+0.35DC,H-DH-936+18);	
	------------------------------------------------------------
    setcolor(cc2);说明曲线颜色
	line(W-DW-DC+10,H-DH-836+18,W-DW-DC+0.35DC,H-DH-836+18);	
	------------------------------------------------------------
	setcolor(cc3);说明曲线颜色
	line(W-DW-DC+10,H-DH-736+18,W-DW-DC+0.35DC,H-DH-736+18);	
	------------------------------------------------------------
	setcolor(c3);说明文字颜色
	outtextxy(W-DW-DC+0.08DC,H-DH-1036+15,放射条件下_细胞存活率曲线);写控件字符串
	outtextxy(W-DW-DC+0.4DC,H-DH-936+15,1.(指数)线性效应);写控件字符串
    outtextxy(W-DW-DC+0.4DC,H-DH-836+15,2.(指数)曲线效应);写控件字符串
    outtextxy(W-DW-DC+0.4DC,H-DH-736+15,3.(指数)叠加效应);写控件字符串
    ------------------------------------------------------------
	6.获取放射剂量从(TA~TB)变化时细胞存活率的变化曲线------------------------------------------------
	double x_scale=(W-2DW-DC)0.1(TB-TA);每个数学单位x对应的屏幕单位
	double y_scale=(H-DH-DD)1.0100.0;每个数学单位y对应的屏幕单位
	double n1,n2,n3;
	DPOINT p1;定义指向点表的指针
	DPOINT p2;
	DPOINT p3;
	p1=new DPOINT[1000];定义N1点表
	p2=new DPOINT[1000];定义N2点表
	p3=new DPOINT[1000];定义N3点表
	for(int j=0;j=(TB-TA)10.0;j++)放射剂量从TA到TB变化
	{
		n1=100.0exp(0.0-d1(0.1j+TA));4.线性效应(%)
		n2=100.0exp(0.0-d2(0.1j+TA)(0.1j+TA));5.曲线效应(%)
		n3=n1n2100.0;6.叠加效应(%)
		p1[j].x=DW+jx_scale;
		p1[j].y=H-DH-n1y_scale;
		p2[j].x=DW+jx_scale;
		p2[j].y=H-DH-n2y_scale;
		p3[j].x=DW+jx_scale;
		p3[j].y=H-DH-n3y_scale;
	}结束for
	6.绘制放射剂量从(TA~TB)变化时细胞存活率的变化曲线---------------------------------------------------
	setcolor(cc1);曲线颜色1
	for(j=0;j(TB-TA)10.0;j++)线性效应
	{
		line(p1[j].x,p1[j].y,p1[j+1].x,p1[j+1].y);
	}结束for
	setcolor(cc2);曲线颜色2
	for(j=0;j(TB-TA)10.0;j++)曲线效应
	{
		line(p2[j].x,p2[j].y,p2[j+1].x,p2[j+1].y);
	}结束for
	setcolor(cc3);曲线颜色3
	for(j=0;j(TB-TA)10.0;j++)叠加效应
	{
		line(p3[j].x,p3[j].y,p3[j+1].x,p3[j+1].y);
	}结束for
}结束子函数
--------------------------------------------------------------------------------------------------------------------

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值