Math 查找短轴点

Math 查找短轴点,math,Math,我有两个椭圆长轴的点,还有短轴的长度,我想找到短轴的点。 我想到的一种方法是找到长轴的斜率,然后找到短轴的斜率。我们有中心点,所以我们得到一个方程。其他方程可以用距离公式得到。但这使得它是二次的。是否可能有某种线性解决方案?您可以使用90°的旋转来表示这一点。假设长轴端点是(x1,y1)和(x2,y2)。此外,假设sqrt((x1-x2)2+(y1-y2)2)=a是长轴的长度,b是短轴的长度。然后M=½(x1+x2,y1+y2)是椭圆的中心,v=½(x1-x2,y1-y2)是从该中心到长轴端点之

我有两个椭圆长轴的点,还有短轴的长度,我想找到短轴的点。
我想到的一种方法是找到长轴的斜率,然后找到短轴的斜率。我们有中心点,所以我们得到一个方程。其他方程可以用距离公式得到。但这使得它是二次的。是否可能有某种线性解决方案?

您可以使用90°的旋转来表示这一点。假设长轴端点是(x1,y1)和(x2,y2)。此外,假设sqrt((x1-x2)2+(y1-y2)2)=a是长轴的长度,b是短轴的长度。然后M=½(x1+x2,y1+y2)是椭圆的中心,v=½(x1-x2,y1-y2)是从该中心到长轴端点之一的向量。因此,w=b/(2a)*(y1-y2,x2-x1)是从中点到短轴一个端点的向量,-w是另一个。所以M±w是两个端点。

你可以用90°的旋转来表示。假设长轴端点是(x1,y1)和(x2,y2)。此外,假设sqrt((x1-x2)2+(y1-y2)2)=a是长轴的长度,b是短轴的长度。然后M=½(x1+x2,y1+y2)是椭圆的中心,v=½(x1-x2,y1-y2)是从该中心到长轴端点之一的向量。因此,w=b/(2a)*(y1-y2,x2-x1)是从中点到短轴一个端点的向量,-w是另一个。所以M±w是两个端点。

所以我这样看:

  • 蓝色的东西是已知的
  • 红色是未知的和需要的
  • A0、A1
    -长轴端点
  • a
    -长轴长度
  • B0、B1
    -短轴端点
  • b
    -短轴长度
  • C
    -椭圆中心
因此,使用向量数学就很简单:

// midpoint is just average of endpoints ...
C=(A0+A1)/2

// major axis size
a=|A1-A0|

// now we need vector `b0` perpendicular to major axis
// in 3D use cross product but for that you need at leas to know 1 more point not on major axis
// in 2D simply swap x,y coordinates and make one negated (that is rotation by 90 degrees) so:
b0.x=(A1.y-A0.y)
b0.y=(A0.x-A1.x)
// now make the b0 vector length equal to halve of minor axis length
b0=0.5*b0*b/|b0|
// hope you know how to compute absolute value of 2D vector (|v|=`sqrt(v.x*v.x+v.y*v.y)`)

// now the endpoints are easy
B0=C+b0
B1=C-b0
  • 若你们有一些不同的输入,比如在图像上
  • 例如,半轴而不是全轴,那么C点是已知的
  • and或b已经减半了,所以不需要乘以0.5
  • 但a需要乘以它,才能得到一半大小

    • 所以我是这样看的:

      • 蓝色的东西是已知的
      • 红色是未知的和需要的
      • A0、A1
        -长轴端点
      • a
        -长轴长度
      • B0、B1
        -短轴端点
      • b
        -短轴长度
      • C
        -椭圆中心
      因此,使用向量数学就很简单:

      // midpoint is just average of endpoints ...
      C=(A0+A1)/2
      
      // major axis size
      a=|A1-A0|
      
      // now we need vector `b0` perpendicular to major axis
      // in 3D use cross product but for that you need at leas to know 1 more point not on major axis
      // in 2D simply swap x,y coordinates and make one negated (that is rotation by 90 degrees) so:
      b0.x=(A1.y-A0.y)
      b0.y=(A0.x-A1.x)
      // now make the b0 vector length equal to halve of minor axis length
      b0=0.5*b0*b/|b0|
      // hope you know how to compute absolute value of 2D vector (|v|=`sqrt(v.x*v.x+v.y*v.y)`)
      
      // now the endpoints are easy
      B0=C+b0
      B1=C-b0
      
      • 若你们有一些不同的输入,比如在图像上
      • 例如,半轴而不是全轴,那么C点是已知的
      • and或b已经减半了,所以不需要乘以0.5
      • 但a需要乘以它,才能得到一半大小


      你在说什么?椭圆?是的,我说的是椭圆。什么点是已知的(长轴的端点或任意点)?你还知道什么?你需要绝对解还是相对解?添加图像将是一个好主意(张贴在某处添加链接,有人会复制到这里)这是任意或轴对齐的椭圆。。。这个问题似乎离题了,因为它是关于数学的,应该移到math.stackexchange。com@spektre长轴的端点和短轴的长度。我在编代码,所以我在这里问一个解决方案你在说什么?椭圆?是的,我说的是椭圆。什么点是已知的(长轴的端点或任意点)?你还知道什么?你需要绝对解还是相对解?添加图像将是一个好主意(张贴在某处添加链接,有人会复制到这里)这是任意或轴对齐的椭圆。。。这个问题似乎离题了,因为它是关于数学的,应该移到math.stackexchange。com@spektre长轴的端点和短轴的长度。我正在编写代码,所以我想在此寻求一个解决方案。遗憾的是,stackoverflow不像许多其他stackexchange站点那样支持数学语法:(管理员不久前告诉我,这是由于服务器开销以及与其他站点相比的系统容量造成的。@Adam。我知道:(我不明白,因为MathJax主要是客户端,尤其是与CDN一起使用时。但这里的问题是,我在Math SE上也非常活跃,实际上没有注意到这个问题在Math SE上没有被问到。谢谢。它真的很有帮助代码正在工作。很遗憾,stackoverflow不像很多人那样支持数学语法其他stackexchange站点:(管理员不久前告诉我,这是由于服务器开销以及与其他站点相比的系统容量造成的。@Adam。我知道:(我不明白,因为MathJax主要是客户端,尤其是与CDN一起使用时。但这里的问题是,我在Math SE上也非常活跃,实际上忽略了这个问题不是在Math SE上提出的。谢谢..它真的很有帮助代码正在工作谢谢you@user3845376这几乎与MvG的答案相同,但我从您的评论中获得印象:您有全轴端点/尺寸,而不是半轴(尺寸的一半)…如果还需要坡度,则在(A0-C)上使用atanxy或atan2向量…是的,这也很好..谢谢..@user3845376这与MvG的答案几乎相同,但我从你的评论中得到的印象是,你有全轴端点/大小,而不是半轴(大小的一半)…如果还需要坡度,那么在(A0-C)向量上使用atanxy或atan2…是的,这也很好..谢谢。。