flex pv3d 有用公式

实用公式 

统领全书,我们已经有了各种运动和效果的公式。我已经提取出了最实用和最常用的公式、方程、以及代码的摘录,并将它们列在本章的最后。我认为将它们放到同一个地方应该对大家非常有帮助,因此我将这些我认为最需要的内容放到一起作为整体的一个参考资料。我将会在这一页夹上书签。 

 

 

第三章 
基础三角函数的计算: 
角的正弦值 = 对边 / 斜边 
角的余弦值 = 邻边 / 斜边 
角的正切值 = 对边 / 邻边 

 

弧度转换为角度以及角度转换为弧度: 
弧度 = 角度 * Math.PI / 180 
角度 = 弧度 * 180 / Math.PI 

 

向鼠标(或者任何一个点)旋转: 
// 用要旋转到的 x, y 坐标替换 mouseX, mouseY 
dx = mouseX - sprite.x; 
dy = mouseY - sprite.y; 
sprite.rotation = Math.atan2(dy, dx) * 180 / Math.PI; 

 

创建波形: 
// 将 x, y 或其它属性赋值给 Sprite 影片或影片剪辑, 
// 作为绘图坐标,等等。 
public function onEnterFrame(event:Event){ 
value = center + Math.sin(angle) * range; 
angle += speed; 

 

创建圆形: 
// 将 x, y 或其它属性赋值给 Sprite 影片或影片剪辑, 
// 作为绘图坐标,等等。 
public function onEnterFrame(event:Event){ 
xposition = centerX + Math.cos(angle) * radius; 
yposition = centerY + Math.sin(angle) * radius; 
angle += speed; 

 

创建椭圆: 
// 将 x, y 或其它属性赋值给 Sprite 影片或影片剪辑, 
// 作为绘图坐标,等等。 
public function onEnterFrame(event:Event){ 
xposition = centerX + Math.cos(angle) * radiusX; 
yposition = centerY + Math.sin(angle) * radiusY; 
angle += speed; 

 

获得两点间的距离: 
// x1, y1 和 x2, y2 是两个点 
// 也可以是 Sprite / MovieClip 坐标,鼠标坐标,等等。 
dx = x2 – x1; 
dy = y2 – y1; 
dist = Math.sqrt(dx*dx + dy*dy); 

 

第四章 

十六进制转换为十进制: 
trace(hexValue); 

 

十进制转换为十六进制: 
trace(decimalValue.toString(16)); 

 

颜色组合: 
color24 = red << 16 | green << 8 | blue; 
color32 = alpha << 24 | red << 16 | green << 8 | blue; 

 

颜色提取: 
red = color24 >> 16; 
green = color24 >> 8 & 0xFF; 
blue = color24 & 0xFF; 
alpha = color32 >> 24; 
red = color32 >> 16 & 0xFF; 
green = color32 >> 8 & 0xFF; 
blue = color232 & 0xFF; 

 

穿过某点绘制曲线: 
// xt, yt 是我们想要穿过的一点 
// x0, y0 以及 x2, y2 是曲线的两端 
x1 = xt * 2 – (x0 + x2) / 2; 
y1 = yt * 2 – (y0 + y2) / 2; 
moveTo(x0, y0); 
curveTo(x1, y1, x2, y2); 

 

第五章 
角速度转换为 x, y 速度: 
vx = speed * Math.cos(angle); 
vy = speed * Math.sin(angle); 

 

角加速度(作用于物体上的 force)转换为 x, y 加速度: 
ax = force * Math.cos(angle); 
ay = force * Math.sin(angle); 

 

将加速度加入速度: 
vx += ax; 
vy += ay; 

 

将速度加入坐标: 
movieclip._x += vx; 
sprite.y += vy; 

 

第六章 
移除出界对象: 
if(sprite.x - sprite.width / 2 > right || 
sprite.x + sprite.width / 2 < left || 
sprite.y – sprite.height / 2 > bottom || 
sprite.y + sprite.height / 2 < top) 

// 删除影片的代码 

 

重置出界对象: 
if(sprite.x - sprite.width / 2 > right || 
sprite.x + sprite.width / 2 < left || 
sprite.y – sprite.height / 2 > bottom || 
sprite.y + sprite.height / 2 < top) 

// 重置影片的位置和速度 

 

屏幕环绕出界对象: 
if(sprite.x - sprite.width / 2 > right) 

sprite.x = left - sprite.width / 2; 

else if(sprite.x + sprite.width / 2 < left) 

sprite.x = right + sprite.width / 2; 

if(sprite.y – sprite.height / 2 > bottom) 

sprite.y = top – sprite.height / 2; 

else if(sprite.y + sprite.height / 2 < top) 

sprite.y = bottom + sprite.height / 2; 

 

摩擦力应用(正确方法): 
speed = Math.sqrt(vx * vx + vy * vy); 
angle = Math.atan2(vy, vx); 
if(speed > friction) 

speed -= friction; 

else 

speed = 0; 

vx = Math.cos(angle) * speed; 
vy = Math.sin(angle) * speed; 

 

摩擦力应用(简便方法): 
vx *= friction; 
vy *= friction; 

 

第八章: 
简单缓动运动,长形: 
var dx:Number = targetX - sprite.x; 
var dy:Number = targetY - sprite.y; 
vx = dx * easing; 
vy = dy * easing; 
sprite.x += vx; 
sprite.y += vy; 

 

简单缓动运动,中形: 
vx = (targetX - sprite.x) * easing; 
vy = (targetY - sprite.y) * easing; 
sprite.x += vx; 
sprite.y += vy; 

 

简单缓动运动,短形: 
sprite.x += (targetX - sprite.x) * easing; 
sprite.y += (targetY - sprite.y) * easing; 

 

简单弹性运动,长形: 
var ax:Number = (targetX - sprite.x) * spring; 
var ay:Number = (targetY - sprite.y) * spring; 
vx += ax; 
vy += ay; 
vx *= friction; 
vy *= friction; 
sprite.x += vx; 
sprite.y += vy; 

 

简单弹性运动,中形: 
vx += (targetX - sprite.x) * spring; 
vy += (targetY - sprite.y) * spring; 
vx *= friction; 
vy *= friction; 
sprite.x += vx; 
sprite.y += vy; 

 

简单弹性运动,短形: 
vx += (targetX - sprite.x) * spring; 
vy += (targetY - sprite.y) * spring; 
sprite.x += (vx *= friction); 
sprite.y += (vy *= friction); 

 

偏移弹性运动: 
var dx:Number = sprite.x - fixedX; 
var dy:Number = sprite.y - fixedY; 
var angle:Number = Math.atan2(dy, dx); 
var targetX:Number = fixedX + Math.cos(angle) * springLength; 
var targetY:Number = fixedX + Math.sin(angle) * springLength; 
// 如前例弹性运动到 targetX, targetY 

 

第九章 
距离碰撞检测: 
// 从影片 spriteA 和 spriteB 开始 
// 如果使用一个空白影片,或影片没有半径(radius)属性 
// 可以用宽度或高度除以 2。 
var dx:Number = spriteB.x - spriteA.x; 
var dy:Number = spriteB.y - spriteA.y; 
var dist:Number = Math.sqrt(dx * dx + dy * dy); 
if(dist < spriteA.radius + spriteB.radius) 

// 处理碰撞 

 

多物体碰撞检测: 
var numObjects:uint = 10; 
for(var i:uint = 0; i < numObjects - 1; i++) 

// 使用变量 i 提取引用 
var objectA = objects[i]; 
for(var j:uint = i+1; j 

  // // 使用变量 j 提取引用 
  var objectB = objects[j]; 
  // perform collision detection 
  // between objectA and objectB 

 

第十章 
坐标旋转: 
x1 = Math.cos(angle) * x - Math.sin(angle) * y; 
y1 = Math.cos(angle) * y + Math.sin(angle) * x; 

 

反坐标旋转: 
x1 = Math.cos(angle) * x + Math.sin(angle) * ;y 
y1 = Math.cos(angle) * y - Math.sin(angle) * x; 

 

第十一章 
动量守恒的数学表达式: 
                (m0 – m1) * v0 + 2 * m1 * v1 
v0Final = ---------------------------------------------- 
                          m0 + m1 

                (m1 – m0) * v1 + 2 * m0 * v0 
v1Final = --------------------------------------------- 
                          m0 + m1 


动量守恒的 ActionScript 表达式,短形: 
var vxTotal:Number = vx0 - vx1; 
vx0 = ((ball0.mass - ball1.mass) * vx0 + 
2 * ball1.mass * vx1) / 
(ball0.mass + ball1.mass); 
vx1 = vxTotal + vx0; 

 

第十二章 
引力的一般公式: 
force = G * m1 * m2 / distance2 

 

ActionScript 实现万有引力: 
function gravitate(partA:Ball, partB:Ball):void 

var dx:Number = partB.x - partA.x; 
var dy:Number = partB.y - partA.y; 
var distSQ:Number = dx * dx + dy * dy; 
var dist:Number = Math.sqrt(distSQ); 
var force:Number = partA.mass * partB.mass / distSQ; 
var ax:Number = force * dx / dist; 
var ay:Number = force * dy / dist; 
partA.vx += ax / partA.mass; 
partA.vy += ay / partA.mass; 
partB.vx -= ax / partB.mass; 
partB.vy -= ay / partB.mass; 

 

第十四章 
余弦定理 
a2 = b2 + c2 - 2 * b * c * cos A 
b2 = a2 + c2 - 2 * a * c * cos B 
c2 = a2 + b2 - 2 * a * b * cos C 

 

ActionScript 的余弦定理: 
A = Math.acos((b * b + c * c - a * a) / (2 * b * c)); 
B = Math.acos((a * a + c * c - b * b) / (2 * a * c)); 
C = Math.acos((a * a + b * b - c * c) / (2 * a * b)); 

 

第十五章 
基本透视法: 
scale = fl / (fl + zpos); 
sprite.scaleX = sprite.scaleY = scale; 
sprite.alpha = scale; // 可选 
sprite.x = vanishingPointX + xpos * scale; 
sprite.y = vanishingPointY + ypos * scale; 

 

Z 排序: 
// 假设有一个带有 zpos 属性的 3D 物体的数组 
objectArray.sortOn("zpos", Array.DESCENDING | Array.NUMERIC); 
for(var i:uint = 0; i < numObjects; i++) 

setChildIndex(objectArray[i], i); 

 

坐标旋转: 
x1 = cos(angleZ) * xpos - sin(angleZ) * ypos; 
y1 = cos(angleZ) * ypos + sin(angleZ) * xpos; 
x1 = cos(angleY) * xpos - sin(angleY) * zpos; 
z1 = cos(angleY) * zpos + sin(angleY) * xpos; 
y1 = cos(angleX) * ypos - sin(angleX) * zpos; 
z1 = cos(angleX) * zpos + sin(angleX) * ypos; 

 

3D 距离: 
dist = Math.sqrt(dx * dx + dy * dy + dz * dz); 

转载于:https://www.cnblogs.com/liongis/archive/2010/08/10/1796558.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

http https http2.0

一.http状态码 1xx&#xff08;信息性状态码&#xff0c;接受的请求正在处理&#xff09;2xx&#xff08;成功状态码&#xff0c;请求正常处理完毕&#xff09;200 OK204 No Content&#xff1a;请求成功但没有资源返回206 Partial Content&#xff1a;范围请求3xx&#xff08…

创建vue项目(三)路由跳转、反向代理、本地存储、状态管理

数据更新渲染&#xff0c;axios请求数据&#xff0c;配置环境 一、路由跳转 app.vue <template><div id"app"><keep-alive><router-view/></keep-alive></div> </template><script> export default {name: app }…

jinfo:JVM运行时配置的命令行浏览

在最近的几篇博客中&#xff08;特别是在对Java EE 7性能调优和优化以及WildFly性能调优的书的评论中&#xff09;&#xff0c;我引用了自己过去在某些Oracle JDK命令行工具上的博客文章。 令我震惊的是&#xff0c;我从来没有专门解决过漂亮的jinfo工具&#xff0c;这篇文章旨…

javascript---parseInt(08)或parseInt(09)转换返回0的解决办法

javascript parseInt函数使用率非常高&#xff0c;主要功能是将一个string转换为integer。有两个重载&#xff1a; parseInt(s);parseInt(s,radix)第一个方式不再多说&#xff0c;第二个方式&#xff0c;radix是s所基于的进制。范围为2-36&#xff08;不在此范围函数将返回NaN&…

创建vue项目(四)路由相关知识、路由守卫、插槽、打包小细节

一、路由相关点 1. 路由跳转传参以及接参 https://segmentfault.com/a/1190000012393587 方法一&#xff1a; &#xff08;1&#xff09; 参数配置&#xff1a; { path : xx/:参数变量,component:xx}(2) 使用 <router-link toxx/参数></router-link>(3) 传参 …

Luogu5298 [PKUWC2018]Minimax

太久没写博客了&#xff0c;过来水一发。感觉自己推式子的功力还不够。。。 题目链接&#xff1a;洛谷 首先我们想到&#xff0c;考虑每个叶节点的权值为根节点权值的概率。首先要将叶节点权值离散化。 假设现在是$x$节点&#xff0c;令$f_i,g_i$分别表示左/右节点的权值$i$的概…

js实现类名的添加与移除

方法1&#xff1a;使用className属性&#xff1b; 方法2&#xff1a;使用classList API&#xff1b; //用于匹配类名存在与否 function reg(name){return new RegExp((^|\\s) name (\\s |$)); }//hasClass addClass removeClass toogleClass var hasClass,addClass,removeCla…

js封装常用函数

自己封装函数时&#xff0c;参数最好不要超过3个&#xff0c;若要超过&#xff0c;可以用数组或者对象&#xff1b; 1. 利用&#xff08;Math.random&#xff09;写指定范围的随机数 2. 补零 3. 数组去重 4. 排序 5. 敏感词过滤 6. 判断数组中是否存在某一条数据&#xff0c;结…

redis学习(一)

1.redis安装&#xff08;来自 https://www.runoob.com/redis/redis-install.html&#xff09; window下安装 下载地址&#xff1a;https://github.com/MSOpenTech/redis/releases。 Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择&#xff0c;这里我们下载 R…

多项式相加链表

#include <stdio.h> #include <stdlib.h> typedef struct Node //一个项节点 { int modulus; //系数 int cover; //幂 struct Node* next; }List; void creatList(List *&l) //创建多项式链表 { List* r; List* s; int n; l (List*)malloc(sizeof(Node)); r …

JPA教程–在Java SE环境中设置JPA

JPA代表Java Persistence API&#xff0c;它基本上是一个规范&#xff0c;描述了一种将数据持久存储到持久存储&#xff08;通常是数据库&#xff09;中的方法。 我们可以将其视为类似于Hibernate的 ORM工具的东西&#xff0c;除了它是Java EE规范的正式组成部分&#xff08;并…

h5上传图片及预览

第一次做图片上传&#xff0c;记录一些问题。 1&#xff0c;图片的base64编码就是可以将一副图片数据编码成一串字符串&#xff0c;使用该字符串代替图像地址。而网页上的每一个图片&#xff0c;都是需要消耗一个http请求下载而来的&#xff0c;使用base64就不用请求http。 2&a…

JSON(一)

JSON&#xff1a;JavaScript Object Notation(JavaScript 對象表示法&#xff09; JSON是存儲和交換文本信息的語法。類似于XML。 JSON比XML更小&#xff0c;更快&#xff0c;更易解析。 什麼是JSON &#xff1f; JSON指的是JavaScript對象表示法 是輕量級的文本數據交換格式…

滚动条造成页面抖动问题

总结&#xff1a; 若用到 margin:0 auto; 使页面居中&#xff0c;若部分页面出现滚动条&#xff0c;滚动条默认有 20px&#xff0c;这样会造成页面抖动&#xff1b; 解决办法&#xff1a;参考 1. html{overflow:scoll;} 让页面一直显示滚动条。 overflow 的几个属性值&#xf…

编写数据访问代码测试–单元测试是浪费

几年前&#xff0c;我是为我的数据访问代码编写单元测试的那些开发人员之一。 我正在孤立地测试所有内容&#xff0c;我对自己感到非常满意。 老实说&#xff0c;我认为自己做得很好。 哦&#xff0c;男孩&#xff0c;我错了&#xff01; 这篇博客文章描述了为什么我们不应该为…

[JSON].typeOf( keyPath )

语法&#xff1a;[JSON].typeOf( keyPath ) 返回&#xff1a;[String | Number | Boolean | Json | Array | Function | 空字符] 说明&#xff1a;获取指定键名值的类型 示例&#xff1a; Set jsonObj toJson("{a: test, b: 1, c:true, d:[1,2,3,4], e:{a1:2}}"…

简单电商购物程序

sum0i1""shuruinput("请输入“手机”或“电脑”&#xff1a;")if shuru"手机": while True: sp{"iphoneX"7998,"华为P30"6998} print(sp) ainput("输入Buy进入结算,继续购买请输入物品名称&#xff1a;") if i&qu…

ie 浏览器布局中的 offset

出现原因&#xff1a; 此处的offset的值表示的是盒子模型经过计算后的实际偏移量&#xff0c;通常是margin及定位偏移量之和&#xff08;flex布局导致的偏移也会计算在内&#xff09;。在此处也无需消除。 解决办法&#xff1a; 父元素设置宽高。设置margin为负数&#xff0…

【Set jsonObj = toJson( jsonString )】创建JSON实例

创建JSON实例&#xff1a; 原型: toJson( jsonString ) 说明: 创建JSON实例 返回: [JSON] 参数:jsonString [可选] 可以用json格式字符串创建实例 示例&#xff1a; <% 方法一&#xff1a;创建一个空的JSON实例 Set jsonObj1 toJson() 方法二&#xff1a;用JSON字符串创建…

当我们的代码遇到问题的时候....;要想不遇到问题,写代码的时候要.....

当我们的代码遇到问题的时候&#xff1a;1&#xff0c;不要怨天怨地。出了问题&#xff0c;当然有可能是系统的bug&#xff0c;API的问题&#xff0c;但是那些几率往往比你犯低级错误的几率要低多了&#xff0c;先从自己身上找原因&#xff0c;是不是自己写错了。   2&#x…