C++ 计算 已知扇形角度和一边的坐标 求另一边 还有判断一点是否存在于这个扇形中
答案:2 悬赏:30 手机版
解决时间 2021-03-25 16:54
- 提问者网友:温旧梦泪无声
- 2021-03-24 17:05
C++ 计算 已知扇形角度和一边的坐标 求另一边 还有判断一点是否存在于这个扇形中
最佳答案
- 五星知识达人网友:低音帝王
- 2021-03-24 18:04
//满足条件的点(x1,y1)会有两个
float x=20,y=20,x0=20,y0=70;
float degree=35;
float x2=32,y2=27;
float x1,y1;
float r;//扇形半径
float theta0,theta1;
r=sqrt(pow((x-x0),2)+pow((y-y0),2));
theta0=acos(abs(x-x0));
theta1=theta0+35;
x1=x+r*cos(theta1);
y1=y+r*sin(theta1);
cout<<"(x1,y1)=("< theta1=theta0-35;
if(theta1<0) theta1=360+theta1;
x1=x+r*cos(theta1);//用参数方程的方式表示圆弧上的点,从而可以求出对应的角度
y1=y+r*sin(theta1);
cout<<"(x1,y1)=("< //下面判断(x2,y2)是否在扇形内
float d1;//点(x,y)与(x2,y2)的距离
float d2;//点(x0,y0)与(x2,y2)的距离
d1=sqrt(pow((x-x2),2)+pow((y-y2),2));
d2=sqrt(pow((x0-x2),2)+pow((y0-y2),2));
theta1=acos((pow(d1,2)+pow(r,2)-pow(d2,2))/(2*d1*r));//利用余弦定理
if(theta1<35)
cout<<"(x2,y2)在扇形内"< else
cout<<"(x2,y2)不在扇形内"<MoveTo(x0,y0);
pDC->LineTo(x,y);
pDC->MoveTo(x1,y1);
pDC->LineTo(x,y);
画出的角度都是超过90度了。。追答哦哦,不好意思,cos、acos这类函数的输入应该是弧度而不是角度,但是整个程序的思路应该是没有问题的。
再试试这个:
const double pi=3.1415926;
//满足条件的点(x1,y1)会有两个
double x=20,y=20,x0=20,y0=70;
double degree=pi*35/180;//角度转成弧度
double x2=32,y2=27;
double x1,y1;
double r;//扇形半径
double theta0,theta1;
r=sqrt(pow((x-x0),2)+pow((y-y0),2));
theta0=acos((x0-x)/r);
theta1=theta0+degree;
x1=x+r*cos(theta1);
y1=y+r*sin(theta1);
cout<<"(x1,y1)=("< theta1=theta0-degree;
if(theta1<0) theta1=2*pi+theta1;
x1=x+r*cos(theta1);//用参数方程的方式表示圆弧上的点,从而可以求出对应的角度
y1=y+r*sin(theta1);
cout<<"(x1,y1)=("< //下面判断(x2,y2)是否在扇形内
double d1;//点(x,y)与(x2,y2)的距离
double d2;//点(x0,y0)与(x2,y2)的距离
d1=sqrt(pow((x-x2),2)+pow((y-y2),2));
d2=sqrt(pow((x0-x2),2)+pow((y0-y2),2));
theta1=acos((pow(d1,2)+pow(r,2)-pow(d2,2))/(2*d1*r));//利用余弦定理
if(theta1 cout<<"(x2,y2)在扇形内"< else
cout<<"(x2,y2)不在扇形内"<
float x=20,y=20,x0=20,y0=70;
float degree=35;
float x2=32,y2=27;
float x1,y1;
float r;//扇形半径
float theta0,theta1;
r=sqrt(pow((x-x0),2)+pow((y-y0),2));
theta0=acos(abs(x-x0));
theta1=theta0+35;
x1=x+r*cos(theta1);
y1=y+r*sin(theta1);
cout<<"(x1,y1)=("<
if(theta1<0) theta1=360+theta1;
x1=x+r*cos(theta1);//用参数方程的方式表示圆弧上的点,从而可以求出对应的角度
y1=y+r*sin(theta1);
cout<<"(x1,y1)=("<
float d1;//点(x,y)与(x2,y2)的距离
float d2;//点(x0,y0)与(x2,y2)的距离
d1=sqrt(pow((x-x2),2)+pow((y-y2),2));
d2=sqrt(pow((x0-x2),2)+pow((y0-y2),2));
theta1=acos((pow(d1,2)+pow(r,2)-pow(d2,2))/(2*d1*r));//利用余弦定理
if(theta1<35)
cout<<"(x2,y2)在扇形内"<
cout<<"(x2,y2)不在扇形内"<
pDC->LineTo(x,y);
pDC->MoveTo(x1,y1);
pDC->LineTo(x,y);
画出的角度都是超过90度了。。追答哦哦,不好意思,cos、acos这类函数的输入应该是弧度而不是角度,但是整个程序的思路应该是没有问题的。
再试试这个:
const double pi=3.1415926;
//满足条件的点(x1,y1)会有两个
double x=20,y=20,x0=20,y0=70;
double degree=pi*35/180;//角度转成弧度
double x2=32,y2=27;
double x1,y1;
double r;//扇形半径
double theta0,theta1;
r=sqrt(pow((x-x0),2)+pow((y-y0),2));
theta0=acos((x0-x)/r);
theta1=theta0+degree;
x1=x+r*cos(theta1);
y1=y+r*sin(theta1);
cout<<"(x1,y1)=("<
if(theta1<0) theta1=2*pi+theta1;
x1=x+r*cos(theta1);//用参数方程的方式表示圆弧上的点,从而可以求出对应的角度
y1=y+r*sin(theta1);
cout<<"(x1,y1)=("<
double d1;//点(x,y)与(x2,y2)的距离
double d2;//点(x0,y0)与(x2,y2)的距离
d1=sqrt(pow((x-x2),2)+pow((y-y2),2));
d2=sqrt(pow((x0-x2),2)+pow((y0-y2),2));
theta1=acos((pow(d1,2)+pow(r,2)-pow(d2,2))/(2*d1*r));//利用余弦定理
if(theta1
cout<<"(x2,y2)不在扇形内"<
全部回答
- 1楼网友:行路难
- 2021-03-24 19:43
供参考:
1. 将中心点移动至原点,及Xnew=X0-20=0 Ynew=Y0-20=50,其位于y轴上
2. 依据35度角,可以利用三角关系求出x1,y1
3. X2new=12,Y2new=7 ,可以求出他与X轴的夹角,与原点的距离,根据这个参数,可以判断是否在扇形内。追问具体c++ 怎么做呢?算出来之后可以用
pDC->MoveTo(x0,y0);
pDC->LineTo(x,y);
pDC->MoveTo(x1,y1);
pDC->LineTo(x,y);
画出一个扇形吗?
1. 将中心点移动至原点,及Xnew=X0-20=0 Ynew=Y0-20=50,其位于y轴上
2. 依据35度角,可以利用三角关系求出x1,y1
3. X2new=12,Y2new=7 ,可以求出他与X轴的夹角,与原点的距离,根据这个参数,可以判断是否在扇形内。追问具体c++ 怎么做呢?算出来之后可以用
pDC->MoveTo(x0,y0);
pDC->LineTo(x,y);
pDC->MoveTo(x1,y1);
pDC->LineTo(x,y);
画出一个扇形吗?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯