社区
图形处理/算法
帖子详情
如何判断点在旋转椭圆内,边界以及包围矩形中
chenzhixin
2009-07-15 06:25:33
椭圆由2点pt1,pt2确定,之间的距离作为长轴,aE=(pt1-pt2)距离/2;
椭圆的旋转角度为pt1和pt2之间的角度.
现在可以跟随鼠标动态绘制旋转的椭圆了。
需要做到椭圆的选取,如何判断一个点是否在旋转的椭圆内呢?
查看反汇编,他们使用世界坐标来转换,然后使用PtInRect来做。
...全文
617
4
打赏
收藏
如何判断点在旋转椭圆内,边界以及包围矩形中
椭圆由2点pt1,pt2确定,之间的距离作为长轴,aE=(pt1-pt2)距离/2; 椭圆的旋转角度为pt1和pt2之间的角度. 现在可以跟随鼠标动态绘制旋转的椭圆了。 需要做到椭圆的选取,如何判断一个点是否在旋转的椭圆内呢? 查看反汇编,他们使用世界坐标来转换,然后使用PtInRect来做。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chenzhixin
2009-07-16
打赏
举报
回复
解决了。旋转的椭圆,需要将当前点绕中心点逆时针旋转angle
http://gpwiki.org/index.php/VB:Rotating_A_Point_In_2D
bool CDrawEllipse::AtEllipse(long x, long y)
{//判断点是否在椭圆上
float a,b,c;//椭圆的长半轴和短半轴,焦半轴
a=(float)abs(((m_x2-m_x1)/2));//长半轴
b=(float)abs(((m_y2-m_y1)/2));//短半轴
float DMax;
float d1,d2;//当前点到两个焦点的距离
float CenterPotX,CenterPotY;//中心点的坐标分量
CenterPotX=(float)((m_x2+m_x1)/2);
CenterPotY=(float)((m_y2+m_y1)/2);
if(a>=b)
{
c=(float)sqrt(a*a-b*b);//焦半轴
d1=(float)sqrt((x-CenterPotX+c)*(x-CenterPotX+c)+(y-CenterPotY)*(y-CenterPotY));//到左焦点的距离
d2=(float)sqrt((x-CenterPotX-c)*(x-CenterPotX-c)+(y-CenterPotY)*(y-CenterPotY));//到右焦点的距离
DMax=(float)abs(d1+d2-2*a);
}
if(a<b)
{
c=(float)sqrt(b*b-a*a);//焦半轴
d1=(float)sqrt((x-CenterPotX)*(x-CenterPotX)+(y-CenterPotY+c)*(y-CenterPotY+c));//到左焦点的距离
d2=(float)sqrt((x-CenterPotX)*(x-CenterPotX)+(y-CenterPotY-c)*(y-CenterPotY-c));//到右焦点的距离
DMax=(float)abs(d1+d2-2*b);
}
return (DMax<2);
}
bool CDrawEllipse::AtEllipseInside(long x, long y)
{//判断点是否在椭圆内
float a,b,c;//椭圆的长半轴和短半轴,焦半轴
a=(float)abs(((m_x2-m_x1)/2));//长半轴
b=(float)abs(((m_y2-m_y1)/2));//短半轴
float DMax;
float d1,d2;//当前点到两个焦点的距离
float CenterPotX,CenterPotY;//中心点的坐标分量
CenterPotX=(float)((m_x2+m_x1)/2);
CenterPotY=(float)((m_y2+m_y1)/2);
if(a>=b)
{
c=(float)sqrt(a*a-b*b);//焦半轴
d1=(float)sqrt((x-CenterPotX+c)*(x-CenterPotX+c)+(y-CenterPotY)*(y-CenterPotY));//到左焦点的距离
d2=(float)sqrt((x-CenterPotX-c)*(x-CenterPotX-c)+(y-CenterPotY)*(y-CenterPotY));//到右焦点的距离
DMax=(float)abs(2*a);
}
if(a<b)
{
c=(float)sqrt(b*b-a*a);//焦半轴
d1=(float)sqrt((x-CenterPotX)*(x-CenterPotX)+(y-CenterPotY+c)*(y-CenterPotY+c));//到左焦点的距离
d2=(float)sqrt((x-CenterPotX)*(x-CenterPotX)+(y-CenterPotY-c)*(y-CenterPotY-c));//到右焦点的距离
DMax=(float)abs(2*b);
}
return (d1+d2<DMax);
}
chenzhixin
2009-07-16
打赏
举报
回复
可是这个椭圆是旋转后的~
写不动代码的人
2009-07-15
打赏
举报
回复
//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)
//在椭圆内部
用户 昵称
2009-07-15
打赏
举报
回复
知道椭圆的方程吗?如果知道方程,最直接的办法就是计算鼠标到两个焦点的距离。
opencv_tutorial_code学习——画最小
包围
旋转
矩形
&画最小
包围
椭圆
tutorial_code\ShapeDescriptors\generalContours_demo2.cpp 步骤: 1、灰度化 2、滤波 3、二值化 4、画轮廓 findContours() 5、画最小
包围
旋转
矩形
和最小
包围
椭圆
vector minRect( contours.size() ); vector minEllipse( contours.size() );
【OpenCV3】
旋转
矩形
(cv::RotateRect)的绘制
在OpenCV3
中
的绘图详解
中
,我们详细地介绍了opencv3
中
所支持的各种几何形状的绘制,其
中
矩形
的绘制接口为cv::rectangle(),但是这个接口只能用于绘制正常
矩形
(即cv::Rect定义的
矩形
,长是水平,高是竖直),但不支持
旋转
矩形
(cv::RotateRect)的绘制。
任意
椭圆
的外凸包
矩形
算法
这里写自定义目录标题任意
椭圆
的外凸包
矩形
算法二次曲线的方程表达式二次曲线方程的系数关系二次曲线分类定理在Geogebra
中
,如何获取二次曲线方程或多项式系数针对一般方程计算
椭圆
的
边界
用 Geogebra 得到的结果离心率蒙日圆利用蒙日圆得到
椭圆
外凸包
矩形
面积差值对比参考文献 任意
椭圆
的外凸包
矩形
算法 问题来源:人脸检测数据集FDDB,涉及到将原标签
中
的
椭圆
形状转化为
矩形
框用于人脸检测,其
中
就有生成斜
椭圆
的外接
包围
矩形
的方法,结果如下图。 注意:不是下图的最小面积
矩形
,最小面积
矩形
指两对边分别与主轴和副轴平
OpenCV3学习(9.3)图像轮廓的多边形逼近approxPolyDP、轮廓
包围
框\圆\
椭圆
、凸包
1. 多边形逼近approxPolyDP 当需要对图像进行形状分析时,需要使用多边形逼近一个轮廓,使得顶
点
数目变少,算法原理比较简单,核心就是不断找多边形最远的
点
加入形成新的多边形,直到最短距离小于指定的精度。OpenCV里面用函数approxPolyDP()实现。approxPolyDP()用另一条顶
点
较少的曲线来逼近一条曲线或者一个多边形,这样两条曲线之间的距离小于或等于指定的精度。...
高效
判断
点
是否在
旋转
图形(
矩形
、
椭圆
、多边形)内的算法优化
本文深入探讨了高效
判断
点
是否在
旋转
图形(
矩形
、
椭圆
、多边形)内的算法优化方法。通过逆向
旋转
思维、分离轴定理、数学变换及并行计算等技巧,显著提升了算法性能,适用于游戏开发、计算机视觉等需要实时碰撞检测的场景。
图形处理/算法
19,464
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章