matlab 如何求圆的圆心坐标

matlab 如何求圆的圆心坐标,第1张

1、首先打开软件,然后进行下一步 *** 作。

2、通过plot命令,画出一个图像。

3、此时可以发现系统根据数据,绘画一个图像。

4、然后在上方找到“datacursor”这就是坐标指针。

5、将鼠标移动到圆心,即可快速查看圆心坐标。

6、这里需要提醒的是,这里一次只能识别一个坐标,如果需要识别多个坐标,可以使用s=input(n)然后鼠标点击图像上坐标来获取。

获取圆心坐标方法,

(setq ent (entlast))获取最后一个对象

(setq obj (vlax-ename->vla-object ent))转换为vlax对象。

(setq pt1 (vlax-get obj 'Center))取得圆心坐标

(setq mj1 (vlax-get-Area obj))取得对象面积

问题:

已知圆上的两点坐标和半径,求圆心。

数学分析:这个题目,涉及到简单的数学问题,但是计算比较繁琐。

假设已知圆上的两点坐标分别为N(X1,Y1)和M(X2,Y2),半径为R,圆心坐标为o(a,b),根据数学知识可得到:

(x1-a)^2 + (y1-b)^2 = R^2----(1)式

(x2-a)^2 + (y2-b)^2 = R^2----(2)式

分别展开上述两个式子得到

(x1)^2 - 2*x1*a + a^2 + (y1)^2 - 2*y1*b + b^2 = R^2 ----(3)式

(x2)^2 - 2*x2*a + a^2 + (y2)^2 - 2*y2*b + b^2 = R^2 ----(4)式

(3)式 - (4)式

得到:

x1^2 - x2^2 + 2*(x2-x1)*a + y1^2 - y2^2 + 2*(y2-y1)*b = 0

变形得到:

a = (x2^2 - x1^2 + y2^2 - y1^2)/2/(x2-x1) - (y2-y1)/(x2-x2) * b

设:C1 = (x2^2 - x1^2 + y2^2 - y1^2)/2/(x2-x1)

设:C2 = (y2-y1)/(x2-x2)

a = c1 - c2 * b ----(5)式

把(5)式代入(1)式,得到;

x1^2 - 2*x1*(C1-C2*b) + (C1-C2*b)^2 + y1^2 -2*y1*b + b^2 = R^2

展开简化为关于b的一元二次方程一般形式;

(C2^2+1)*b^2 + (2*x1*C1-2*C1*C2-2*y1)*b + x1^2-2*x1*C1+C1^2+y1^2-R^2 = 0

二次项系数:A = (C2^2+1)

一次项系数:B = (2*x1*C1-2*C1*C2-2*y1)

常数项:C = x1^2-2*x1*C1+C1^2+y1^2-R^2

根的判别式:Derta = B^2 - 4*A*C

如果:Derta <0 则无解

Derta >0 有两个不同的解

Derta =0 有两个相同的解

代码:

在窗体上添加7个文本框:

Text1 --输入已知圆上点第1个的X坐标

Text2 --输入已知圆上点第1个的Y坐标

Text3 --输入已知圆上点第2个的X坐标

Text4 --输入已知圆上点第2个的Y坐标

Text5 --输入已知圆的半径

Text6 --输出圆心的X坐标

Text7 --输出圆心的Y坐标

添加一个按钮;

代码如下:

Private Sub Command1_Click()

Dim x1, y1, x2, y2, R As Single

Dim x01, y01, x02, y02 As Single

Dim A, B, C As Single

Dim Derta As Single

Dim C1, C2 As Single

x1 = Val(Text1.Text)

y1 = Val(Text2.Text)

x2 = Val(Text3.Text)

y2 = Val(Text4.Text)

R = Val(Text5.Text)

C1 = (x2 ^ 2 - x1 ^ 2 + y2 ^ 2 - y1 ^ 2) / 2 / (x2 - x1)

C2 = (y2 - y1) / (x2 - x1)

A = (C2 ^ 2 + 1)

B = 2 * x1 * C2 - 2 * C1 * C2 - 2 * y1

C = x1 ^ 2 - 2 * x1 * C1 + C1 ^ 2 + y1 ^ 2 - R ^ 2

Derta = B ^ 2 - 4 * A * C

If Derta >= 0 Then

Derta = Derta ^ (0.5)

y01 = (-B + Derta) / 2 / A

y02 = (-B - Derta) / 2 / A

x01 = C1 - C2 * y01

x02 = C1 - C2 * y02

'因为是一元二次方程,得到2个实数根,需要略去一个增根

If Abs((x1 - x01) ^ 2 + (y1 - y01) ^ 2 - R ^ 2) <Abs((x1 - x02) ^ 2 + (y1 - y02) ^ 2 - R ^ 2) Then

Text6.Text = x01

Text7.Text = y01

Else

Text6.Text = x02

Text7.Text = y02

End If

Else

MsgBox("无解!")

Text6.Text = Derta

End If

End Sub


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12003550.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存