如果说其矩形框左上点是(X1,Y1),右下点是(X2,Y2)
要判断的点是POINT
那我这样写:
int a = ((x1-x2)/2)^2;
int b = ((y1-y2)/2)^2;
int c = (x1+x2)/2;
int d = (y1+y2)/2;
if((((point.x-c)^2)/a+((point.y-d)^2)/b)<=1)
{
m_bSelecting = TRUE;
}
有错么?
为什么点在椭圆外但是矩形框内时仍然会m_bSelecting = TRUE?

解决方案 »

  1.   

    先把int转换成float再进行运算
      

  2.   

    orbit(走了走了)
    我用的不是椭圆方程么???谢谢 i_noname(晚九朝五)
    但是问题还是存在,到底哪里出错了?
      

  3.   

    你把改成float的代码再贴出来
    我来试试
      

  4.   

    x1 = 10
    x2 = 1int a = ((x1-x2)/2)^2; = ((10 - 1) / 2)^2 = 4^2 = 16
    实际应该是20.25
    除2时有问题,应该用float
      

  5.   

    谢谢楼上各位^^解决了
    的确是FLOAT的问题
    X1,X2,Y1,Y2一开还是INT所以出错了
    现在全都改为FLOAT就可以了
    谢谢各位^^
      

  6.   

    //m_pt1 m_pt2是椭圆所在矩形的两个点
    float fRX=(m_pt2.x-m_pt1.x)/2.f;  
    float fRY=(m_pt2.y-m_pt1.y)/2.f;
    CPoint cter;//椭圆中心点
    if(pow(pnt.x-cter.x,2)+pow(pnt.y-cter.y,2)*(fRX/fRY)*(fRX/fRY)<=fRX*fRX)
            //在椭圆内部