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

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

不多废话,直接上图:
在这里插入图片描述
场景描述:
在平面直角坐标系中,已知A、B两点坐标,并且画以AB为对角线的矩形的内接椭圆哦O,判断光标是否在椭圆上(选中该椭圆对象,椭圆高亮)。
首先,复习下焦点不在坐标轴的椭圆的方程:
在这里插入图片描述
点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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值