已知圆上两点坐标(两点有顺序,一个起始点一个终止点)、凸度求圆心坐标
发布网友
发布时间:2022-04-30 23:26
我来回答
共5个回答
热心网友
时间:2023-10-08 07:43
(1)AutoCAD中约定:凸度为0是直线顶点,它与下一个顶点连接为一直线;凸度不为0是圆弧顶点,它与下一个顶点连接为一圆弧;凸度值为负表示顺时针圆弧,凸度值为正表示逆时针圆弧;凸度绝对值小于1表示圆弧包角小于180°,凸度绝对值大于1表示圆弧包角大于180°。凸度与圆弧包角的关系是:圆弧包角= 4×arctan|凸度值|。 void lwpolylineToArc(CPoint3d BeginPoint,CPoint3d EndPoint,double u,CPoint3d &CenterPoint)
{
double centerAngle;//包角
centerAngle=4*atan(abs(u));
centerAngel=centerAngel/pi;
double x1,x2,y1,y2;//圆弧起始点和终止点
x1=BeginPoint.x;
x2=EndPoint.x;
y1=BeginPoint.y;
y2=EndPoint.y;
double L; //弦长
L=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
double R;//圆弧半径
R=0.5*L/sin(0.5*centerAngle);
//已知圆上两点和半径,求圆心坐标
double h;//圆心到弦的距离
h=sqrt(R*R-L*L/4);
double k;//起始点和终止点连线的中垂线斜率
double xc,yc;//圆心坐标
double xa,ya; //起始点和终止点连线的中点横纵坐标
xa=0.5*(x1+x2);
ya=0.5*(y1+y2);
//弦的方向角(0-2PI之)
double angle;//起点到终点的弦向量与x正方向之间的倾斜角
angle=acos((x2-x1)/sqrt(pow(x2-x1,2)+pow(y2-y1,2)));
double amass; //弦向量与X轴正向单位向量的叉积
amass = y1-y2;//由(由(x2-x1)*0-1*(y2-y1))得到
if (amass<0)
{ angle=-angle;
angle=2*PI+angle;
}
double DirectionAngel;//弦中点到圆心的直线向量的方向角(0-2PI之间)
if ((u>0 && centerAngle<PI)||(u<0 && centerAngle>PI))
DirectionAngel=angle+PI/2;
if((u<0 && centerAngle<PI)||(u>0 && centerAngle>PI))
DirectionAngel=angle-PI/2;
if (DirectionAngel>2*PI)
DirectionAngel= DirectionAngel-2*PI;
double d;//圆心到弦的距离
d=sqrt(R*R-L*L/4);
if (DirectionAngle=0)
{
xc=xa+d;
yc=ya;
}
else if(DirectionAngle=PI/2)
{
xc=xa;
yc=ya+d;
}
else if (DirectionAngle=PI)
{
xc=xa-d;
yc=xa;
}
else if (DirectionAngle=PI+PI/2)
{
xc=xa;
yc=xa-d;
}
else
{
double nslope,k;//nslope 为弦的斜率,K为弦中垂线的斜率
double nAngle;//中垂线的倾斜角;
double X,Y; //圆心相对于弦中心点的坐标偏移量
nslope = (y2 - y1) / (x2-x1);
k = -1 / nslope;
nAngle = atan(k) ;
X = cos(nAngle) * d;
Y = sin(nAngle) * d;
if (DirectionAngle > PI / 2 && DirectionAngle < PI )
{X = -X;
Y = -Y;
}
if (DirectionAngle > PI && DirectionAngle < (PI + PI / 2) )
{
X = -X;
Y = -Y;
}
xc=xa + X;
yc=ya+ Y;
CenterPoint.x=xc;
CenterPoint.y=yc;
CenterPoint.z=0.0;
热心网友
时间:2023-10-08 07:44
已知圆上两点坐标 (x1,y1),(x2,y2), 求圆心坐标(x,y)
已知凸度是两点夹角(1/4)的正切值,用arctan,解得夹角值A.
设圆半径=r
r^2=(x1-x)^2+(y1-y)^2----------------(1)
r^2=(x2-x)^2+(y2-y)^2----------------(2)
余弦定律:
(x1-x2)^2+(y1-y2)^2=r^2+r^2-2*r*r*cos(A)
r^2=[(x1-x2)^2+(y1-y2)^2]/[2*(1-cos(A))]-----------(3)
从(3),代换r^2 入(1),(2)==> 解得 x,y
热心网友
时间:2023-10-08 07:44
可设圆心坐标(x,y),则可表示两点与圆心构成的两直线
凸度是两点夹角1/4的正切值 可求出 夹角的正切值tanα
即两直线夹角 正切值为 tanα
用两直线夹角公式可计算,得出方程一
圆心到两点距离相等,可得方程二
联立 一、二 可求解
热心网友
时间:2023-10-08 07:45
代码有错误,慎用
centerAngel=centerAngel/pi; 多余了
R=0.5*L/sin(0.5*centerAngle); 存在误差,R的计算方法参考CAD解析
if (amass<0) 应该是大于号
很多angle写成angel
热心网友
时间:2023-10-08 07:45
请到我的博客去找找,你会发现惊喜。简单如斯:
b = 0.5*(1/bulge-bulge);
center.x = 0.5*((x1+x2)-(y2-y1)*b);
center.y = 0.5*((y1+y2)+(x2-x1)*b);
网页链接