如果说其矩形框左上点是(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?
要判断的点是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?
我用的不是椭圆方程么???谢谢 i_noname(晚九朝五)
但是问题还是存在,到底哪里出错了?
我来试试
x2 = 1int a = ((x1-x2)/2)^2; = ((10 - 1) / 2)^2 = 4^2 = 16
实际应该是20.25
除2时有问题,应该用float
的确是FLOAT的问题
X1,X2,Y1,Y2一开还是INT所以出错了
现在全都改为FLOAT就可以了
谢谢各位^^
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)
//在椭圆内部