actionscript3 常用类库

本文提供了一组用于坐标转换和数学运算的实用函数,包括坐标系之间的转换、随机数生成、角度处理等,适用于Flash开发环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




//======================================
////////////////////////////////////////


//扩展Math函数 

////////////////////////////////////////
//======================================



package cn.flashOpen.kit {

import flash.display.Sprite;
import flash.display.MovieClip;
import flash.geom.Point;


    
public class ExtMath
    
{
        
        
//坐标转换
        
//car2Flash//迪卡尔坐标转成Flash坐标
        public static function car2Flash(_mc) 
        
{
            _mc.y 
= _mc.y * -1;
            _mc.rotation 
= _mc.rotation * -1;
        }

        
        
        
        
//flash2Car//Flash坐标转成迪卡尔坐标
        public static function flash2Car (_mc) 
        
{
            
return (car2Flash(_mc));
        }

        
        
        
        
//car2Polar//迪卡尔坐标转成极坐标
        public static function car2Polar (x:Number, y:Number) 
        
{
            var len:Number 
= Math.sqrt((x * x) + (y * y));
            var ang:Number 
= atan2D(y, x);
            
return ({r:len, a:ang});
        }

        
        
        
        
//polar2Car//极坐标转成迪卡尔坐标
        public static function polar2Car (len:Number, ang:Number) 
        
{
            var xx:Number 
= len * cosD(ang);
            var yy:Number 
= len * sinD(ang);
            
return ({x:xx, y:yy});
        }

        
        
        
        
//getMcCoordG//获得本身全局坐标
        public static function getMcCoordG (_mc)
        
{
            
//_mc为要获得坐标的影片,他的坐标系影片为:_mc.parent;
            var p:Point = new Point(_mc.x, _mc.y);
            p 
= _mc.parent.localToGlobal(p);
            
return p;
        }

        
        
        
        
//getCoordG//获得影片全局坐标
        public static function getCoordG (_mc, _xx:Number, _yy:Number)
        
{
            
//_mc要xx,yy所在坐标系的影片(若xx = myMc.x,则坐标系影片为:myMc.parent)
            var p:Point = new Point(_xx, _yy);
            p 
= _mc.localToGlobal(p);
            
return p;
        }

        
        
        
//getCoordL//获得影片本地坐标
        public static function getCoordL (_mc, _xx:Number, _yy:Number)
        
{
            
//_mc要xx,yy要转入的坐标系的影片
            var p:Point = new Point(_xx, _yy);
            p 
= _mc.parent.globalToLocal(p);
            
return p;
        }

        
        
        
//mc2McCoord//转换成特定影片的坐标
        public static function mc2McCoord (_mc1, _mc2, _xx, _yy)
        
{
            
//mc1为_xx,_yy所在的坐标系影片,_mc2为要转入的坐标系影片
            var p:Point = new Point(_xx, _yy);
            p 
= _mc1.localToGlobal(p);
            p 
= _mc2.parent.globalToLocal(p);
            
return p;
        }

        
        
        
        
        
        
        
        
        
//数学函数
        
        
        
//标签
        
//getRand//获得随机数
        static function getRand(_nStartNum:Number, _nEndNum:Number, _nDecimalDigits:Number)
        
{
            var nRange 
= _nEndNum - _nStartNum;
            var nRand 
= _nStartNum + Math.random() * nRange;
            var nScale 
= Math.pow(10, _nDecimalDigits);
            nRand 
= Math.floor(nRand * nScale)/nScale;
            
            
return nRand;
        }

        
    
        
//randPole//获得随机正负标签
        public static function randPole ()
        
{
            var nPole:Number 
= Math.random() > 0.5 ? 1:-1;
            
return nPole;
        }

        
        
        
//intRand//获得随机向下取整的整数
        public static function intRand (_n:Number)
        
{
            var n:Number 
= Math.floor(Math.random() * _n);
            
return n;
        }

        
        
        
//intCeil//获得随机向上取整的整数
        public static function ceilRand (_n:Number)
        
{
            var n:Number 
= Math.ceil(Math.random() * _n);
            
return n;
        }

        
        
        
        
        
        
//距离
        
//getDis//获得距离
        public static function getDis (_x1:Number, _y1:Number, _x2:Number, _y2:Number)
        
{
            var dx:Number 
= _x2 - _x1;
            var dy:Number 
= _y2 - _y1;
            var L:Number 
= Math.sqrt(dx * dx + dy * dy);
            
return L;
        }

        
        
        
        
//getL2//获得三角形短边
        public static function getL2 (_l1:Number, _l3:Number)
        
{
            
//_l1为短边, _l3为长边
            var l2:Number = Math.sqrt(_l3 * _l3 - _l1 * _l1);
            
return l2;
        }

        
        
        
        
//getL3//获得三角形长边
        public static function getL3 (_l1:Number, _l2:Number)
        
{
            
//_l1,_l2为短边
            var l3:Number = Math.sqrt(_l1 * _l1 + _l2 * _l2);
            
return l3;
        }

        
        
        
        
        
        
//三角函数 
        
        
//正函数
        
//sinD
        public static function sinD (_ang:Number)
        
{
            var n:Number 
= Math.sin(_ang * 3.141593 / 180);
            
return n;
        }

        
        
        
        
//cosD
        public static function cosD (_ang:Number)
        
{
            var n:Number 
= Math.cos(_ang * 3.141593 / 180);
            
return n;
        }

        
        
        
        
//tanD
        public static function tanD (_ang:Number)
        
{
            var n:Number 
= Math.tan(_ang * 3.141593 / 180);
            
return n;
        }

        
        
        
        
        
//反函数
        
//asinD
        public static function asinD (_ratio:Number)
        
{
            var n:Number 
= Math.asin(_ratio) * 57.295780;
            
return n;
        }

        
        
        
        
//acosD
        public static function acosD (_ratio:Number)
        
{
            var n:Number 
= Math.acos(_ratio) * 57.295780;
            
return n;
        }

        
        
        
        
//atan2D
        public static function atan2D (y:Number, x:Number)
        
{
            var ang:Number 
= Math.atan2(y, x) * 57.295780;
            
return ang;
        }

        
        
        
        
        
        
//角度操作
        
//d2r
        public static function d2r (_ang:Number)
        
{
            var radian:Number 
= _ang * 0.017453;
            
return radian;
        }

        
        
        
        
//d2r
        public static function r2d (_radian:Number)
        
{
            var ang:Number 
= _radian * 57.295780;
            
return ang;
        }

        
        
        
        
//fixAngle//标准化角度
        public static function fixAng (_ang:Number)
        
{
            var _ang:Number 
= _ang % 360;
            var ang:Number 
= _ang % 360 < 0 ? _ang + 360 : _ang;
            
return ang;
        }

        
        
        
        
//getAngle//获得角度
        public static function getAng (_x1:Number, _y1:Number, _x2:Number, _y2:Number)
        
{
            var ang:Number 
= Math.atan2(_y2 - _y1, _x2 - _x1) * 57.295780;
            
return ang;
        }

        
        
        
        
//getClampAng/获得夹角
        public static function getClampAng (_a1:Number, _a2:Number)
        
{
            var a1:Number 
= fixAng(_a1);
            var a2:Number 
= fixAng(_a2);
            
            var dAng:Number 
= Math.abs(a2 - a1);
            
            
if(dAng > 180) dAng = 360 - dAng;
            dAng 
= fixAng(dAng);
            
            
return dAng;
        }

        
        
        
        
//getOutAng/获得出射角
        public static function getOutAng (_lineAng:Number, _inAng:Number)
        
{
            
//_lineAng为水平线的角度, _inAng为入射角度
            var outAng:Number = _lineAng * 2 - _inAng;
            
return outAng;
        }

        
        
        
        
//getTrendRo//获得趋近角度
        public static function getTrendRo (_oAng:Number, _aimAng:Number, _trandRate:Number, _minAng:Number)
        
{
            
//_oAng为原角度,_aimAng为目标角度
            
//_rate < 1时为_aimAng和_oAng夹角的趋近比率,_rate>1时为每次改变的角度
            
//_minAng为执行的最小角度
            
            var dAng:Number 
= fixAng(_aimAng - _oAng);
            var absDAng:Number 
= Math.abs(dAng);
            var minAng:Number 
= !_minAng ? 0 : _minAng;
            
            
if(absDAng <= minAng) return _oAng;
            
            var pole:Number;
            
            
if(absDAng > 180)
            
{
                absDAng 
= 360 - absDAng;
                pole 
= -absDAng/dAng;
            }

            
else
            
{
                pole 
= absDAng/dAng;
            }

            
            var newAng:Number;
            
            
if(_trandRate < 1)
            newAng 
= _oAng + pole * absDAng * _trandRate;
            
else
            newAng 
= _oAng + pole * _trandRate;
            
            
return newAng;
        }

        
        
        
        
//classRo//经典旋转
        public static function classRo  (_xx:Number,_yy:Number,_ang:Number,_ox:Number,_oy:Number)
        
{
            
//_xx,_yy为要旋转的点坐标,_ang为要旋转的角度,
            
//_ox,_oy为旋转中心点
            
            var x:Number 
= _xx;
            var y:Number 
= _yy;
            var ang:Number 
= _ang;
            var ox:Number 
= _ox;
            var oy:Number 
= _oy;
            
            x 
-= ox;
            y 
-= oy;
            
            var x1:Number 
= cosD(ang) * x - sinD(ang) * y;
            var y1:Number 
= cosD(ang) * y + sinD(ang) * x;
            
            x1 
+= ox;
            y1 
+= oy;
            
            
return {x:x1,y:y1};
        }

        
        
        
        
//mcRo//影片旋转
        public static function mcRo (_mc, _xx:Number, _yy:Number, _offsetAng:Number)
        
{
            
//_mc为要旋转的影片,_xx为目标x坐标,_yy为目标y坐标,_offsetAng为偏移角度
            
            var x:Number 
= _xx - _mc.x;
            var y:Number 
= _yy - _mc.y;
            var ang:Number 
= atan2D(y,x);
            
            
if(_mc)
            
{
                
if(!_offsetAng) _offsetAng = 0;
                ang 
+= _offsetAng;
            }

            
            
return ang;
        }

        
        
        
        
        
//oddsManage//几率管理
        public static function oddsManage (_mc, _aOdds:Array, _aFun:Array)
        
{
            var len:Number 
= _aOdds.length;
            var nRand:Number 
= Math.random();
            var id:Number 
= 0;
            
            
            
for(var i=0; i<len; i++)
            
{
                var rate1:Number 
= 0;
                var rate2:Number 
= _aOdds[i];
                
                
                
for(var j=0; j<i; j++)
                
{
                    rate1 
+= _aOdds[j];
                }

                
                
                rate2 
+=  rate1;
                

                
if(nRand >= rate1)
                
{
                    
if(nRand < rate2)
                    
{
                        id 
= i;
                        
break;
                    }

                }

                
            }

            
            
return _mc[_aFun[id]]();
        }

    }

}
1. 用户与身体信息管理模块 用户信息管理: 注册登录:支持手机号 / 邮箱注册,密码加密存储,提供第三方快捷登录(模拟) 个人资料:记录基本信息(姓名、年龄、性别、身高、体重、职业) 健康目标:用户设置目标(如 “减重 5kg”“增肌”“维持健康”)及期望周期 身体状态跟踪: 体重记录:定期录入体重数据,生成体重变化曲线(折线图) 身体指标:记录 BMI(自动计算)、体脂率(可选)、基础代谢率(根据身高体重估算) 健康状况:用户可填写特殊情况(如糖尿病、过敏食物、素食偏好),系统据此调整推荐 2. 膳食记录与食物数据库模块 食物数据库: 基础信息:包含常见食物(如米饭、鸡蛋、牛肉)的名称、类别(主食 / 肉类 / 蔬菜等)、每份重量 营养成分:记录每 100g 食物的热量(kcal)、蛋白质、脂肪、碳水化合物、维生素、矿物质含量 数据库维护:管理员可添加新食物、更新营养数据,支持按名称 / 类别检索 膳食记录功能: 快速记录:用户选择食物、输入食用量(克 / 份),系统自动计算摄入的营养成分 餐次分类:按早餐 / 午餐 / 晚餐 / 加餐分类记录,支持上传餐食照片(可选) 批量操作:提供常见套餐模板(如 “三明治 + 牛奶”),一键添加到记录 历史记录:按日期查看过往膳食记录,支持编辑 / 删除错误记录 3. 营养分析模块 每日营养摄入分析: 核心指标计算:统计当日摄入的总热量、蛋白质 / 脂肪 / 碳水化合物占比(按每日推荐量对比) 微量营养素分析:检查维生素(如维生素 C、钙、铁)的摄入是否达标 平衡评估:生成 “营养平衡度” 评分(0-100 分),指出摄入过剩或不足的营养素 趋势分析: 周 / 月营养趋势:用折线图展示近 7 天 / 30 天的热量、三大营养素摄入变化 对比分析:将实际摄入与推荐量对比(如 “蛋白质摄入仅达到推荐量的 70%”) 目标达成率:针对健
1. 用户管理模块 用户注册与认证: 注册:用户填写身份信息(姓名、身份证号、手机号)、设置登录密码(需符合复杂度要求),系统生成唯一客户号 登录:支持账号(客户号 / 手机号)+ 密码登录,提供验证码登录、忘记密码(通过手机验证码重置)功能 身份验证:注册后需完成实名认证(模拟上传身份证照片,系统标记认证状态) 个人信息管理: 基本信息:查看 / 修改联系地址、紧急联系人、邮箱等非核心信息(身份证号等关键信息不可修改) 安全设置:修改登录密码、设置交易密码(用于转账等敏感操作)、开启 / 关闭登录提醒 权限控制:普通用户仅能操作本人账户;管理员可管理用户信息、查看系统统计数据 2. 账户与资金管理模块 账户管理: 账户创建:用户可开通储蓄卡账户(默认 1 个主账户,支持最多 3 个子账户,如 “日常消费账户”“储蓄账户”) 账户查询:查看各账户余额、开户日期、状态(正常 / 冻结)、交易限额 账户操作:挂失 / 解挂账户、申请注销账户(需余额为 0) 资金操作: 转账汇款:支持同行转账(输入对方账户号 / 手机号),需验证交易密码,可添加常用收款人 存款 / 取款:模拟存款(输入金额增加余额)、取款(输入金额减少余额,需不超过可用余额) 交易记录:按时间、类型(转入 / 转出 / 存款 / 取款)查询明细,显示交易时间、金额、对方账户(脱敏显示)、交易状态 3. 账单与支付模块 账单管理: 月度账单:自动生成每月收支明细,统计总收入、总支出、余额变动 账单查询:按月份、交易类型筛选账单,支持导出为 Excel 格式 还款提醒:若有贷款(简化版可模拟),系统在还款日 3 天前发送提醒 快捷支付: 绑定支付方式:添加银行卡(系统内账户)作为支付渠道 模拟消费:支持输入商户名称和金额,完成支付(从账户余额扣减) 支付记录:保存所有消费记录,包含商户、时间、金额、支付状态 4.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值