//--------------------------------------------------------------------------------------------------
//数学模型小作业(小艇会和模型)
//题目描述:
//01.参考书目:ISBN 978-7-5609-4459-3.
//01.假设小艇B执行玩成任务后,需要与大船A会和.假设船在洋面航线为直线,且两船的航速航向保持不变;
//02.以这个距离为y轴,距离中点为原点O,建立坐标系:已知大船A的坐标(0,b),速度v1,航向偏角θ1;已知小船B的坐标(0,-b),速度v2,假设航向偏角θ2.
//03.试讨论两船能够相遇的条件;如果能够相遇,试求出相遇地点P(x,y).
//04.为方便讨论,假设v1,v2为常数,并引入中间变量,速度比:a=v2/v1;
//05.假设能够达到会和,则小艇的行进距离|BP|=a*|Ap|.即得到会和地点的轨迹方程:
//06.x^2+(y+b)^2=(a^2)*[x^2+(y+b)^2],变形得到:[(a^2-1)]*[x^2]+[(a^2-1)]*[y^2]-2*(a^2+1)*b*y+[(a^2-1)]*[b^2]=0.
//07.根据速度比a与1的关系,分三种条件讨论:
//08.(I)a=1的情况下,两船速度相等,方程的解为y=0.会和地点必然在线段AB的垂直平分线上.即大船A回头来救才可能会和,θ1必须偏向(A->B)方向.
//19. 行进距离:s=b/sin(θ1).
//10. 会和时间:t=s/v1=b/[v1*sin(θ1)].
//11.(II)a>1的情况下,方程07变形,x^2+y^2-2*[(a^2+1)/(a^2-1)]*b*y+b^2=0.即:x^2+[y-b*(a^2+1)/(a^2-1)]^2=4*a^2*b^2/[(a^2-1)^2].
//12. 引入中间变量:h=b*(a^2+1)/(a^2-1).
//13. 引入中间变量:r=2ab/fabs(a^2-1).
//14. 则上面的式子可以简写为:x^2+(y-h)^2=r^2.此时的会和地点是一个以(0,h)为圆心,r为半径的圆.无论θ1为任何方向,都可能会和.
//15. 可以得到:|h|>b,且|h|>r;(dr/da)<0,(dh/da)<0,速度比a越大,半径r越小,会和距离也越小.
//15.(III)a<1的情况,是第二种情况的反问题,不做讨论.
//程序编制要求:
//1.两船的距离|AB|,大船A的航速v1,航向角θ1,小船的航速v2,航向角θ2.
//2.计算相遇的时间,及大船和小船各自行进的路程(只讨论a>1的情况).
//3.绘制速度距离示意图.
//--------------------------------------------------------------------------------------------------------------------
#include //包含Easyx模拟TC的BGI绘图库头文件
#include //包含数学运算头文件
#include //
#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 c1 RGB(38,47,86)//宏定义辅助线颜色1
#define c2 RGB(38,47,86)//宏定义辅助线颜色2
#define c3 RGB(255,255,255)//宏定义文字及边框颜色
#define c4 RGB(255,255,0)//颜色4
#define c5 RGB(0,255,255)//颜色5
#define c6 RGB(0,255,0)//颜色6
//曲线颜色------------------------------------------
#define cc1 RGB(0,255,255)//宏定义曲线颜色4(青色)
#define cc2 RGB(0,255,0)//宏定义曲线颜色2(绿色)
#define cc3 RGB(38,47,86)//宏定义曲线颜色3(黄色)
#define cc4 RGB(0,255,100)//宏定义曲线颜色1(红色)
#define cc5 RGB(255,100,0)//宏定义曲线颜色5(青色)
//定义结构体-------------------------------------------------------------------------------------------------------
typedef struct points
{
double x,y;//定义双精度变量
}DPOINT;//结束结构体
//窗口全局变量-----------------------------------------------------------------------------------------------------
int W = GetSystemMetrics(SM_CXSCREEN);//获取整个屏幕右下角X坐标
int H = GetSystemMetrics(SM_CYSCREEN);//屏幕Y坐标
int c_h=36;//定义控件高度
double xx=DW+(W-2*DW-DC)*0.5;//平面原点x
double yy=DD+(H-DD-DH)*0.5;//平面原点y
//数据全局变量
char is1[20]="1000.0";//预定义:1.两船距离|AB|(m)
char is2[20]="10.0";//2.大船速度v1(m/s)
char is3[20]="20";//3.大船方向角θ1(°)
char is4[20]="20.0";//4.小船速度v2(m/s)
char is14[20]="20.0";//14.输入时间(s)
char is5[20],is6[20],is7[20],is8[20],is9[20],is10[20],is11[20],is12[20],is13[20],is15[20],is16[20];//定义字符数组(存储字符串)
double d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,ym,xm,ni;//(存储计算值)
int i,j,k;//
double value;//定义双精度变量
char stt[10];//定义字符数组
//函数声明---------------------------------------------------------------------------------------------------------
void sub_frame();//绘制框架子函数
void sub_calculate();//计算数据子函数
void func_IP(double xt1,double h,double r,double b,double *x,double *y);//根据直线圆方程返回交点.
//主函数-----------------------------------------------------------------------------------------------------------
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.两船距离|AB|(m):-----------------------------------------------------
if(m.y>=H-DH-16*c_h+1 && m.y<=H-DH-15*c_h-1)//
{
InputBox(is1,9,"请输入数据");//读入数据
setfillcolor(BLACK);
fillrectangle(W-DW-DC+DC/2+10,H-DH-16*c_h+1,W-DW,H-DH-15*c_h);
outtextxy(W-DW-DC+DC/2+15,H-DH-16*c_h+15,is1);//写控件字符串
}//结束if
//2.大船速度v1(m/s):-----------------------------------------------------
if(m.y>=H-DH-15*c_h+1 && m.y<=H-DH-14*c_h-1)//
{
InputBox(is2,9,"请输入数据");//读入数据
setfillcolor(BLACK);
fillrectangle(W-DW-DC+DC/2+10,H-DH-15*c_h+1,W-DW,H-DH-14*c_h);
outtextxy(W-DW-DC+DC/2+15,H-DH-15*c_h+15,is2);//写控件字符串
}//结束if
//3.大船方向角θ1(°):-----------------------------------------------------
if(m.y>=H-DH-14*c_h+1 && m.y<=H-DH-13*c_h-1)//
{
InputBox(is3,9,"请输入数据");//读入数据
setfillcolor(BLACK);
fillrectangle(W-DW-DC+DC/2+10,H-DH-14*c_h+1,W-DW,H-DH-13*c_h);
outtextxy(W-DW-DC+DC/2+15,H-DH-14*c_h+15,is3);//写控件字符串
}//结束if
//4.小船速度v2(m/s):-----------------------------------------------------
if(m.y>=H-DH-13*c_h+1 && m.y<=H-DH-12*c_h-1)//
{
InputBox(is4,9,"请输入数据");//读入数据
setfillcolor(BLACK);
fillrectangle(W-DW-DC+DC/2+10,H-DH-13*c_h+1,W-DW,H-DH-12*c_h);
outtextxy(W-DW-DC+DC/2+15,H-DH-13*c_h+15,is4);//写控件字符串
}//结束if
//14.输入时间(s):-----------------------------------------------------
if(m.y>=H-DH-3*c_h+1 && m.y<=H-DH-2*c_h-1)//
{
InputBox(is14,9,"请输入数据");//读入数据
setfillcolor(BLACK);
fillrectangle(W-DW-DC+DC/2+10,H-DH-3*c_h+1,W-DW,H-DH-2*c_h);
outtextxy(W-DW-DC+DC/2+15,H-DH-3*c_h+15,is14);//写控件字符串
}//结束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);//控件区域边框
//5.输出标题
setfont(16,0,"黑体");
outtextxy(5,10,"数学模型小作业(小艇会和模型)");
//6.输出简单说明
RECT r={W-DW-DC+10,DD+10,W-DW-10,H-DH-10};//
setfont(12,0,"宋体");//
drawtext("数学模型小作业:\n \n \
小艇会和模型\
\
\n\n\
操作说明:\n\n\
鼠标左键 : 数据输入\n\
鼠标右键 : 退出程序\n\
\n\
1~4为输入数据 5~16为计算数据\n\
\n\n\
\n\n\
\
\n", &r, DT_WORDBREAK);//
//7.调整说明文字下面的矩形控件
int c_x1=W-DW-DC,c_x2=W-DW;//控件左右x坐标
int c_y1=H-DH;//第1个控件下y坐标
for(int 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-16*c_h+15,"1.两船距离|AB|(m):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-15*c_h+15,"2.大船速度v1(m/s):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-14*c_h+15,"3.大船方向角θ1(°):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-13*c_h+15,"4.小船速度v2(m/s):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-12*c_h+15,"5.速度比a:");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-11*c_h+15,"6.中间变量h(m):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-10*c_h+15,"7.中间变量r(m):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-9*c_h+15,"8.会和地点x(m):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-8*c_h+15,"9.会和地点y(m):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-7*c_h+15,"10.小船方向角θ2(°):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-6*c_h+15,"11.会和时间(s):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-5*c_h+15,"12.大船行进距离(m):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-4*c_h+15,"13.小船行进距离(m):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-3*c_h+15,"14.输入时间(s):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-2*c_h+15,"15.小船位置x(m):");//输出字符串模拟控件文字
outtextxy(c_x1+10,H-DH-1*c_h+15,"16.小船位置y(m):");//输出字符串模拟控件文字
//8.初始化原始数据
outtextxy(W-DW-DC+DC/2+35,H-DH-16*c_h+15,is1);//写控件字符串
outtextxy(W-DW-DC+DC/2+35,H-DH-15*c_h+15,is2);//写控件字符串
outtextxy(W-DW-DC+DC/2+35,H-DH-14*c_h+15,is3);//写控件字符串
outtextxy(W-DW-DC+DC/2+35,H-DH-13*c_h+15,is4);//写控件字符串
outtextxy(W-DW-DC+DC/2+35,H-DH-3*c_h+15,is14);//写控件字符串
}//结束子程序
//计算数据子函数
void sub_calculate()
{
//1.原始数据转化为双精度数
d1=atof(is1);//1.两船距离|AB|(m)
d2=atof(is2);//2.大船速度v1(m/s)
d3=atof(is3);//3.大船方向角θ1(°)
d4=atof(is4);//4.小船速度v2(m/s)
d14=atof(is14);//14.输入时间(s)
//2.根据数据计算要求项目---------------------------------------------------------------------------
d5=1.0*d4/d2;//5.速度比a
if(d5 > 1.0)//只讨论a>1的情况
{
d6=0.5*d1*(d5*d5+1)/(d5*d5-1);//6.中间变量h(m)
d7=d1*d5/fabs(d5*d5-1);//7.中间变量r(m)
func_IP(d3,d6,d7,0.5*d1,&d8,&d9);//8.会和地点x(m)9.会和地点y(m)
d12=sqrt(d8*d8+(d9-0.5*d1)*(d9-0.5*d1));//12.大船行进距离(m)
d13=sqrt(d8*d8+(d9+0.5*d1)*(d9+0.5*d1));//13.小船行进距离(m)
d11=1.0*d12/d2;//11.会和时间(s)
double d10_r=atan2(d9+0.5*d1,d8);//10.小船方向角θ2(rad)
double d3_r=d3*PI/180.0;//
d10=d10_r*180.0/PI;//10.小船方向角θ2(°)
d15=d14*d4*cos(d10_r);//15.小船位置x(m)
d16=d14*d4*sin(d10_r)-0.5*d1;//16.小船位置y(m)
d17=d14*d2*sin(d3_r)+0.5*d1;//16.大船位置y(m)
}//
//3.将计算结果转化为字符串--------------------------------------------------------------------------
gcvt(d5,4,is5);//
gcvt(d6,4,is6);//
gcvt(d7,4,is7);//
gcvt(d8,4,is8);//
gcvt(d9,4,is9);//
gcvt(d10,4,is10);//
gcvt(d11,4,is11);//
gcvt(d12,4,is12);//
gcvt(d13,4,is13);//
gcvt(d15,4,is15);//
gcvt(d16,4,is16);//
//4.将字符串写入控件中
setfillcolor(BLACK);
//------------------------------------------------------------
fillrectangle(W-DW-DC+DC/2+40,H-DH-12*c_h+1,W-DW,H-DH-11*c_h);
outtextxy(W-DW-DC+DC/2+45,H-DH-12*c_h+15,is5);//写控件字符串
//------------------------------------------------------------
fillrectangle(W-DW-DC+DC/2+40,H-DH-11*c_h+1,W-DW,H-DH-10*c_h);
outtextxy(W-DW-DC+DC/2+45,H-DH-11*c_h+15,is6);//写控件字符串
//------------------------------------------------------------
fillrectangle(W-DW-DC+DC/2+40,H-DH-10*c_h+1,W-DW,H-DH-9*c_h);
outtextxy(W-DW-DC+DC/2+45,H-DH-10*c_h+15,is7);//写控件字符串
//------------------------------------------------------------
fillrectangle(W-DW-DC+DC/2+40,H-DH-9*c_h+1,W-DW,H-DH-8*c_h);
outtextxy(W-DW-DC+DC/2+45,H-DH-9*c_h+15,is8);//写控件字符串
//------------------------------------------------------------
fillrectangle(W-DW-DC+DC/2+40,H-DH-8*c_h+1,W-DW,H-DH-7*c_h);
outtextxy(W-DW-DC+DC/2+45,H-DH-8*c_h+15,is9);//写控件字符串
//------------------------------------------------------------
fillrectangle(W-DW-DC+DC/2+40,H-DH-7*c_h+1,W-DW,H-DH-6*c_h);
outtextxy(W-DW-DC+DC/2+45,H-DH-7*c_h+15,is10);//写控件字符串
//------------------------------------------------------------
fillrectangle(W-DW-DC+DC/2+40,H-DH-6*c_h+1,W-DW,H-DH-5*c_h);
outtextxy(W-DW-DC+DC/2+45,H-DH-6*c_h+15,is11);//写控件字符串
//------------------------------------------------------------
fillrectangle(W-DW-DC+DC/2+40,H-DH-5*c_h+1,W-DW,H-DH-4*c_h);
outtextxy(W-DW-DC+DC/2+45,H-DH-5*c_h+15,is12);//写控件字符串
//------------------------------------------------------------
fillrectangle(W-DW-DC+DC/2+40,H-DH-4*c_h+1,W-DW,H-DH-3*c_h);
outtextxy(W-DW-DC+DC/2+45,H-DH-4*c_h+15,is13);//写控件字符串
//------------------------------------------------------------
fillrectangle(W-DW-DC+DC/2+40,H-DH-2*c_h+1,W-DW,H-DH-1*c_h);
outtextxy(W-DW-DC+DC/2+45,H-DH-2*c_h+15,is15);//写控件字符串
//------------------------------------------------------------
fillrectangle(W-DW-DC+DC/2+40,H-DH-1*c_h+1,W-DW,H-DH-0*c_h);
outtextxy(W-DW-DC+DC/2+45,H-DH-1*c_h+15,is16);//写控件字符串
//------------------------------------------------------------
setcolor(cc1);//说明曲线颜色
line(W-DW-DC-200,H-DH-3*c_h+10,W-DW-DC-260,H-DH-3*c_h+10);
outtextxy(W-DW-DC-200+15,H-DH-3*c_h+5,"1.大船位移-航迹");//写控件字符串
//------------------------------------------------------------
setcolor(cc2);//说明曲线颜色
line(W-DW-DC-200,H-DH-2*c_h+10,W-DW-DC-260,H-DH-2*c_h+10);
outtextxy(W-DW-DC-200+15,H-DH-2*c_h+5,"2.小船位移-航迹");//写控件字符串
//------------------------------------------------------------
setcolor(cc3);//说明曲线颜色
line(W-DW-DC-200,H-DH-1*c_h+10,W-DW-DC-260,H-DH-1*c_h+10);
outtextxy(W-DW-DC-200+15,H-DH-1*c_h+5,"3.辅助圆-会和位置");//写控件字符串
//------------------------------------------------------------
//5.绘制工作区坐标线
//画x轴刻度标线及文字(时间t)---------------------------
double xstep=(W-2*DW-DC)/(1.0*nx);//x方向步长(nx个刻度)(对应的绘图单位)
double ystep=(H-DH-DD)/(1.0*ny);//y方向步长(ny个刻度)(对应的绘图单位)
ym=0.5*d1+2.0*d7;//参考变量
xm=1.0*(W-2*DW-DC)*ym/(H-DH-DD);//参考变量
double y_scale=(H-DH-DD)*1.0/(2.0*ym);//比例
setcolor(c1);//
line(DW,yy,W-DW-DC,yy);//x轴
for(i=0;i<=nx;i++)
{
setcolor(c1);//竖直辅助线颜色
line(DW+xstep*i,yy,DW+xstep*i,yy-5);//画竖直小刻度线
setcolor(c3);//文字颜色
value=(i-0.5*nx)*(2.0*xm)/nx;//所在的刻度数值
gcvt(value,6,stt);//将浮点数value转换为字符串stt
outtextxy(DW+xstep*i-10,yy-20,stt);//在规定的位置放置字符串
}//结束for
//画y轴刻度标线及文字(速度)---------------------------
setcolor(c1);//
line(xx,DD,xx,H-DH);//y轴
for(i=0;i<=ny;i++)
{
setcolor(c2);//水平辅助线颜色
line(xx,DD+ystep*i,xx+5,DD+ystep*i);//画水平小刻度线
setcolor(c3);//文字颜色
value=(0.5*ny-i)*(2.0*ym)/ny;//所在的刻度数值
gcvt(value,5,stt);//将浮点数value转换为字符串stt
outtextxy(xx+15,DD+ystep*i-10,stt);//在规定的位置放置字符串
}//结束for
//绘制点位-----------------------------------------------------------
//[AP][BP]连线
setcolor(cc1);//
line(xx,yy-0.5*d1*y_scale,xx+d8*y_scale,yy-d9*y_scale);//AP连线
setcolor(cc2);//
line(xx,yy+0.5*d1*y_scale,xx+d8*y_scale,yy-d9*y_scale);//BP连线
setcolor(cc3);//
circle(xx,yy-d6*y_scale,d7*y_scale);//辅助圆
setcolor(cc1);//
//[A点]
line(xx-5,yy-0.5*d1*y_scale,xx+5,yy-0.5*d1*y_scale);
line(xx,yy-0.5*d1*y_scale-5,xx,yy-0.5*d1*y_scale+5);
//[B点]
line(xx-5,yy+0.5*d1*y_scale,xx+5,yy+0.5*d1*y_scale);
line(xx,yy+0.5*d1*y_scale-5,xx,yy+0.5*d1*y_scale+5);
//[P点]
line(xx+d8*y_scale-5,yy-d9*y_scale,xx+d8*y_scale+5,yy-d9*y_scale);
line(xx+d8*y_scale,yy-d9*y_scale-5,xx+d8*y_scale,yy-d9*y_scale+5);
//[H点]
line(xx-5,yy-d6*y_scale,xx+5,yy-d6*y_scale);
line(xx,yy-d6*y_scale-5,xx,yy-d6*y_scale+5);
//[当前XA,XB点]
line(xx+d15*y_scale-5,yy-d17*y_scale,xx+d15*y_scale+5,yy-d17*y_scale);
line(xx+d15*y_scale,yy-d17*y_scale-5,xx+d15*y_scale,yy-d17*y_scale+5);
line(xx+d15*y_scale-5,yy-d16*y_scale,xx+d15*y_scale+5,yy-d16*y_scale);
line(xx+d15*y_scale,yy-d16*y_scale-5,xx+d15*y_scale,yy-d16*y_scale+5);
setcolor(cc2);//
//文字说明
setcolor(RED);//三个坐标轴颜色
setfont(20,0,"黑体");
outtextxy(xx-20,yy+10,"O");//原点O
outtextxy(W-DW-DC-20,yy+10,"X");//x轴
outtextxy(xx-20,DD+10,"Y");//Y轴
outtextxy(xx-20,yy-0.5*d1*y_scale,"A");//A点
outtextxy(xx-20,yy+0.5*d1*y_scale,"B");//B点
outtextxy(xx-20,yy-d6*y_scale,"H");//H点
outtextxy(xx+d8*y_scale+5,yy-d9*y_scale+5,"P");//P点
//6.重新绘制工作区边框
setcolor(c3);
rectangle(DW,DD,W-DW,H-DH);//外边框
rectangle(W-DW-DC,DD,W-DW,H-DH);//控件区域边框
//------------------------------------------------------------
}//结束子函数
void func_IP(double xt1,double h,double r,double b,double *x,double *y)//根据直线圆方程返回交点.
{
double k1,d1,delt;//
while(xt1 >= 360.0){xt1-=360.0;}//
//根据角度θ1进行讨论----------------
if(xt1 == 0)//1.x+轴上
{
*y=b;//
*x=sqrt(r*r-(b-h)*(b-h));//
}//
else if(xt1 >0.0 && xt1 <90.0)//2.在第一象限
{
k1=tan(xt1*PI/180.0);//斜率
d1=b-h;//中间变量
delt=sqrt(4*k1*k1*d1*d1-4*(k1*k1+1)*(d1*d1-r*r));//
*x=-(2.0*k1*d1)+delt;//
*x=0.5*(*x)/(k1*k1+1);//
*y=k1*(*x)+b;//
}//
else if(xt1 == 90.0)//3.y+轴上
{
*x=0.0;//
*y=r+h;//
}//
else if(xt1 >90.0 && xt1 <180.0)//4.在第二象限
{
k1=tan(xt1*PI/180.0);//斜率
d1=b-h;//中间变量
delt=sqrt(4*k1*k1*d1*d1-4*(k1*k1+1)*(d1*d1-r*r));//
*x=-(2.0*k1*d1)-delt;//
*x=0.5*(*x)/(k1*k1+1);//
*y=k1*(*x)+b;//
}//
else if(xt1 == 180.0)//5.x-轴上
{
*y=b;//
*x=-sqrt(r*r-(b-h)*(b-h));//
}//
else if(xt1 >180.0 && xt1 <270.0)//6.在第三象限
{
k1=tan(xt1*PI/180.0);//斜率
d1=b-h;//中间变量
delt=sqrt(4*k1*k1*d1*d1-4*(k1*k1+1)*(d1*d1-r*r));//
*x=-(2.0*k1*d1)-delt;//
*x=0.5*(*x)/(k1*k1+1);//
*y=k1*(*x)+b;//
}//
else if(xt1 == 270.0)//7.y-轴上
{
*x=0.0;//
*y=-r+h;//
}//
else if(xt1 >270.0 && xt1 <360.0)//8.在第四象限
{
k1=tan(xt1*PI/180.0);//斜率
d1=b-h;//中间变量
delt=sqrt(4*k1*k1*d1*d1-4*(k1*k1+1)*(d1*d1-r*r));//
*x=-(2.0*k1*d1)+delt;//
*x=0.5*(*x)/(k1*k1+1);//
*y=k1*(*x)+b;//
}//
}//结束主函数
//*/
//--------------------------------------------------------------------------------------------------