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

解决方案 »

  1.   

    设已知点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满足椭圆公式。两个方程两个未知数.
    =========
    找到的资料,楼主参考一下吧。
      

  2.   

    http://sq.k12.com.cn/bbs/index.php?t=msg&th=201006&start=0&rid=0推荐楼主去看看
      

  3.   

    感谢楼上两位兄弟!
    我是用Graphics.DrawEllipse()画的椭圆,参数是一个矩形,怎么得出椭圆公司呢?
      

  4.   

    zswang 说的是解方程组吗
    x2^2 / a^2 + y2^2 / b^2 = 1
    ((b^2*x2)/(a^2*y2))*((y2-y1)/(x2-x1))=-1我x1,y1用c,d替换,x2,y2用x,y替换x^2 / a^2 + y^2 / b^2 = 1
    ((b^2*x)/(a^2*y))*((y-d)/(x-c))=-1其中 a,b,c,d已知解了半天都没有解出来啊,谁帮帮我啊!!!
      

  5.   

    就是求方程:
    (aa-bb)sintcos-(ax0sint-by0cost)=0
    解得:
    t=f(x0,y0)
    不会算