【问题标题】:How to find the intersection of two ellipses in MATLAB如何在MATLAB中找到两个椭圆的交集
【发布时间】:2016-09-16 19:27:59
【问题描述】:

我有两个方程:

ellipseOne = '((x-1)^2)/6^2 + y^2/3^2 = 1';

ellipseTwo = '((x+2)^2)/2^2 + ((y-5)^2)/4^2 = 1';

我绘制了它们:

ezplot(ellipseOne, [-10, 10, -10, 10])
hold on
ezplot(ellipseTwo, [-10, 10, -10, 10])
title('Ellipses')
hold off

现在我试图找到两个椭圆的交点。我试过了:

intersection = solve(ellipseOne, ellipseTwo)
intersection.x
intersection.y

找到它们相交的点,但 MATLAB 给了我一个矩阵和一个方程作为我不明白的答案。谁能指出我正确的方向以获得交叉点的坐标?

【问题讨论】:

  • 这里你使用solve的方式不正确;调用应该是 S = solve(eqn,var)。处理这个问题的最简单方法是,因为两个方程都等于 1,所以将两个方程设置为彼此相等并相减。所以 ellipseDiff = '((x-1)^2)/6^2 + y^2/3^2 -((x+2)^2)/2^2 - ((y-5)^2)/ 4^2 = 0'。
  • @IanRiley solve的一般用法其实是S = solve(eqn1, eqn2, ... eqnM, var1, var2, ... varN);。这种用法其实是正确的。省略任何var* 变量会自动确定变量是什么。但是,solve 的当前文档具有您所说的方式……这很奇怪。在 MATLAB R2015b 中执行 help solve 为我提供了第一种调用方式。我假设第一种方式最终会被弃用,但它的使用在这里仍然是正确的。
  • 呵呵;在文档中发现这样的缺陷很奇怪。感谢@rayryeng 的提示

标签: matlab intersection ellipse


【解决方案1】:

解决方案是符号形式的。您需要采取的最后一步是将其转换为数字。只需使用double 转换结果。然而,因为这是一对二次方程,由于符号模糊(即+/-)有 4 个可能的解,并且可能给出虚根。因此,找出真正的解决方案,剩下的应该是您的答案。

因此:

% Your code
ellipseOne = '((x-1)^2)/6^2 + y^2/3^2 = 1';
ellipseTwo = '((x+2)^2)/2^2 + ((y-5)^2)/4^2 = 1';
intersection = solve(ellipseOne, ellipseTwo);

% Find the points of intersection
X = double(intersection.x);
Y = double(intersection.y);
mask = ~any(imag(X), 2) | ~any(imag(Y), 2);
X = X(mask); Y = Y(mask);

前三行代码就是您所做的。接下来的四行以数字形式提取根,然后我创建一个 logical 掩码,它只隔离出真实的点。这会查看所有根的 XY 坐标的虚部,如果任何根都存在这样的组件,我们希望消除这些。我们最终删除了虚构的根,我们应该留下两个真实的根。

因此我们得到了我们的交点:

>> disp([X Y])
   -3.3574    2.0623
   -0.2886    2.9300

第一列是X 坐标,第二列是Y 坐标。这似乎也符合剧情。我将使用您的椭圆绘图代码,并使用上述解决方案将交点插入为蓝点:

ezplot(ellipseOne, [-10, 10, -10, 10])
hold on
ezplot(ellipseTwo, [-10, 10, -10, 10])
% New - place intersection points
plot(X, Y, 'b.');
title('Ellipses');
hold off;

【讨论】:

  • 这正是我所需要的。非常感谢
  • 如何找到一个椭圆在另一个椭圆内?
  • @manoos 我现在看到你的问题了。不幸的是,这个问题超出了范围。你需要问一个新的。如果你已经问过了,请给我一个链接。
  • @rayryeng:请回复此链接stackoverflow.com/questions/56927210/…
猜你喜欢
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多