我有一个圆心,中心坐标和半径。
飞机上还有其他圆圈,其位置已知且半径相同。
如何使用Matlab找出平面中其他圆圈所覆盖的给定圆周长部分?
答案 0 :(得分:4)
一般方法是:
如何计算圆圈和另一个圆圈所覆盖的圆周部分?
您可以提前返回,结果是总周长被覆盖但如果不是,则必须测试每隔一个圆圈。
它只能起作用,因为所有圆的半径相等。如果其他圆圈可能更小,那么它仍然可以,但如果它们可能更大,则不会总是得到交叉点,使整个问题变得更加困难。但你说,这不是这种情况。
答案 1 :(得分:1)
正如Trilarion所解释的那样,计算的核心是你需要交叉两个圆圈。
你可以在网上找到这个代码,也可以自己编写代码。一个来源是 Computational Geometry in C ,与2D机器人手臂动作(arm.c
)相关联的代码,其中包括与两个圆相交的函数。有一些堕落的情况必须小心处理:两个圆相交只有一个点,或相等的圆相交成一个圆圈。
答案 2 :(得分:1)
要把事情放在透视图中,你可以使用matlab pde向我们展示数字
pdecirc(1,2,3)
pdecirc(-1,-1,2)
如果你想用matlab在matlab上绘图,那就是:
n = 100 % Resolution
angle = 0:2*pi/n:2*pi; % vector of angles at which points are drawn
R = 3; % radius
x = R*cos(angle)+2; y = R*sin(angle)+1; % Coordinates of the circle
plot(x,y); % Plot the circle
axis equal;
grid on;
你可以根据自己的喜好进行绘图,如果想要非常高的分辨率,可能需要将n设置为高值。现在回答你的问题.. 使用matlab circcirc查找圆圈的交点,有关详细信息,请参阅http://uk.mathworks.com/help/map/ref/circcirc.html
[xout,yout] = circcirc(1,2,3,-1,-1,2); %which returns the x-intersects and the y-intersects
您可以对x和y相交进行分组,并根据半径和相交进行圆周计算。如果你不知道怎么做,请查看http://mathcentral.uregina.ca/QQ/database/QQ.09.07/h/michelle3.html 假设您有2个以(1,2)和(-1,-1)为中心的圆圈
i = pdist([xout(1),yout(1);xout(2),yout(2)],'euclidean') %distance between intersects
P = [xout(1),yout(1);1,2] %coordinate of one of the intersections and your centre
E = pdist(P,'euclidean')
y = asin(i/(2*E))*2 %angle of your arc
cir = pi*2*R1*(y/(2*pi))
%的弧度乘以总周长
这应该会在两个圈子之间给你答案,除非我的高中数学不及我。
PS:使用circcirc的好处是,如果圆圈不相交(即重叠或不相互接触,则返回坐标的NaN,然后可以处理)