C++处理点在椭圆上的问题

最近,在工作中遇到需要处理鼠标选中椭圆的问题,思来想去,最后老老实实使用标准方程来解决的。今天,一起假装高中生 _

不多废话,直接上图:
C++处理点在椭圆上的问题_第1张图片
场景描述:
在平面直角坐标系中,已知A、B两点坐标,并且画以AB为对角线的矩形的内接椭圆哦O,判断光标是否在椭圆上(选中该椭圆对象,椭圆高亮)。
首先,复习下焦点不在坐标轴的椭圆的方程:
C++处理点在椭圆上的问题_第2张图片
点O(c,d)即为该椭圆中心点。

这里,我在实际项目中,为了鼠标选中椭圆明显,设置10%的上下浮动。
来看看具体实现:

bool PtInEllipse(CPoint pt1, CPoint pt2, CPoint pt0)
{
	CPoint ptCenter((pt2.x + pt1.x) / 2, (pt2.y + pt1.y) / 2);

	const int nLengthHorizon = abs(pt2.x - pt1.x) / 2;//a
	const int nLengthVertical = abs(pt2.y - pt1.y) / 2;//b

	float fRate = ((float)(pow(pt0.x - ptCenter.x, 2)) / pow(nLengthHorizon, 2)) +
		((float)(pow(pt0.y - ptCenter.y, 2)) / pow(nLengthVertical, 2));

	if (0.9 <= fRate&&fRate <= 1.1)//10%浮动,选中效果明显
	{
		return true;
	}

	return false;
}

你可能感兴趣的:(C++椭圆判断)