判定一个点是否包含在一个任意朝向椭圆内的基本几何算法(as3源码)

一个圆,沿着y轴压扁后,就变为一个椭圆了(可能只是类椭圆)

圆很常见,判定一个点是否包含在一个圆中很简单:只要判定此点距离圆心的距离是否小于圆的半径即可

椭圆虽是圆的"变种"(或者反过来说原始椭圆的特例),但是判定一个点是否在一个椭圆内,就不是这么方便了。

这给出的方法是判定一个点是否包含在一个任意朝向椭圆内的基本算法

沿y轴将圆压扁成为椭圆, 就相当于沿y轴将坐标空间压缩了

而椭圆的旋转就相当于坐标空间旋转了,废话就不说了,请看flash示例:

 点击这个flash中椭圆附近的位置可做包含测试

检测方法as3源码如下:

//
/*
*
         * @param        px    待检测点x坐标
         * @param        py    待检测点y坐标
         * @param        cx    椭圆中心点x坐标
         * @param        cy    椭圆中心点y坐标
         *                 (px,py) 与 (cx,cy) 位于同一坐标空间
         * 
         * @param        r    椭圆的最大半径(实际就是将圆沿y轴压扁变为椭圆的源圆的半径)
         * @param        sy    将圆沿y轴压扁变为椭圆时候的比例
         * @param        rad    椭圆旋转的角度
         * 
*/
         private function containsXY(px:Number, py:Number, cx:Number, cy:Number, r:Number, sy:Number =  1.0,rad:Number =  0.0):Boolean         {
             //  旋转坐标空间
             var tv:Vector_2D =  new Vector_2D(px - cx, py - cy);
            tv.rotate( -rad);
             //  缩放坐标空间
            tv.y /= sy;
             if (tv.magnitude() < r) {
                 return  true;
            }            
             return  false;
        }

此方法中的Vector_2d请见:http://www.cnblogs.com/vilyLei/articles/1567703.html

源码下载

转载于:https://www.cnblogs.com/vilyLei/articles/2621511.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值