日期:2014-05-18  浏览次数:21236 次

怎样求点到椭圆的最短距离?


有一个椭圆是用矩形表示的(Graphics.DrawEllipse的参数),已知椭圆外一点,现在要从椭圆边线上画出一条直线与该点相连,并且要求是最短的直线,怎么求出椭圆上的那一点呢?

public PointF aaa(Rectangle 椭圆,Point 椭圆外一点)
{
  ...
  ...
  return 我要求的点;
}

------解决方案--------------------
设已知点P1(x1,y1),椭圆公式x^2 / a^2 + y^2 / b^2 = 1.
求一点P2(x2,y2)在椭圆上并且满足P1P2距离最近.
分解:这样的P2满足在椭圆上并且过该点的椭圆的切线与P1P2直线垂直.
解决:
1)过P2点切线公式:x2 * X / a^2 + y2 * Y / b^2 = 1. 那么切线的斜率是k1 = (b^2 * x2) / (a^2 * y2).
2)直线P1P2斜率是k2 = (y2 - y1) / (x2 - x1).
3)两直线垂直,那么k1 * k2 = -1.
这样((b^2 * x2) / (a^2 * y2)) * ((y2 - y1)/(x2 - x1)) = -1(公式一)
加上P2满足椭圆公式。两个方程两个未知数.
=========
找到的资料,楼主参考一下吧。

------解决方案--------------------
http://sq.k12.com.cn/bbs/index.php?t=msg&th=201006&start=0&rid=0

推荐楼主去看看