`
hje
  • 浏览: 288205 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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);

分享到:
评论
1 楼 fykyx521 2009-11-21  
收藏了 

相关推荐

    flex pv3d 照片浏览 照片墙

    标题中的“flex pv3d 照片浏览 照片墙”指的是使用Adobe Flex技术结合PV3D库开发的一款3D照片浏览应用,它创建了一种类似照片墙的展示效果,让用户能够以三维视角来查看和浏览照片。这种技术在Web前端开发中常用于...

    flex pv3d test

    标题“flex pv3d test”指向的是一种使用Adobe Flex技术进行3D图形编程的测试案例。Flex是基于ActionScript和MXML的开源框架,主要用于构建富互联网应用程序(RIA)。PV3D,全称 Papervision3D,是Flex中一个流行的...

    flex全景pv3d

    flex全景as库。直接更改路径就能使用,非常方便,并且欢迎研究全景的同行加好友一起研究技术,多交流!

    Demo.rar_3d_flex_flex Graphic._pv3d flex_pv3d fl

    标题 "Demo.rar_3d_flex_flex Graphic._pv3d flex_pv3d fl" 提供的信息表明,这个压缩包包含了一个与3D图形相关的Flex应用程序的演示,使用了PV3D库。描述中提到“利用PV3D做的flex DEMO 实现了#3D特效”,进一步...

    用于flash中的PV3D 组件包

    在给定的“用于flash中的PV3D组件包”中,我们将探讨PV3D(Papervision3D)如何与Flex结合,以及如何利用它来创建震撼的3D效果。 PV3D是Adobe Flash平台上的一款强大的3D引擎,它为开发者提供了在Flash Player中...

    Luminex Flexmap 3D液相芯片系统的应用及使用维护技巧.pdf

    Luminex Flexmap 3D液相芯片系统是由美国Luminex公司推出的基于Flexmap3D技术(流式荧光技术)的超高通量检测系统。该系统运用荧光编码微球、激光检测技术和计算机算法,实现了对多因子的高通量检测。它广泛应用于...

    pv3d+flex 自写例子

    在本文中,我们将深入探讨如何将Flex与PV3D结合使用,通过一个自编的示例来阐述这一技术的应用。PV3D(PaperVision3D)是一个强大的3D图形库,它为Adobe Flex应用程序提供了丰富的三维渲染能力。而Flex则是一种基于...

    PV3D源码包(1.5版本和1.7版本)

    Papervision3D(PV3D)是Flex平台上的一个开源3D引擎,它为Adobe Flash和Flex应用程序提供了强大的3D图形渲染能力。在本文中,我们将深入探讨PV3D 1.5版本和1.7版本的源码,解析其核心概念,帮助开发者更好地理解和...

    pv3d最新资源包

    5. **兼容性**:PV3D与Flex和ActionScript 3.0紧密集成,使得具备AS3编程经验的开发者能够快速上手。 在这个资源包中,可能包含以下内容: - **库文件**:PV3D的核心库,如`pv3d.swc`,开发者可以将其导入到他们的...

    pv3d安装,简单运用的实例

    在安装PV3D之前,你需要确保已经安装了Adobe Flex SDK和Flash Player,因为PV3D是基于ActionScript 3.0开发的,与Flash平台紧密相连。你可以通过官方网站下载这些工具。安装PV3D库时,通常是将下载的库文件添加到...

    pv3d简单全景

    PV3D(Papervision3D)是ActionScript 3 (AS3)的一个开源库,专门用于在Adobe Flash Player环境中创建3D图形和交互式应用程序。本项目“pv3d简单全景”显然是使用PV3D库来构建一个基本的全景体验,下面我们将详细...

    PV3D的SWC、AS文件和英文API

    在实际开发中,首先需要在Flash IDE或Flex Builder中导入PV3D的SWC库。然后,你可以创建一个`Scene3D`对象作为3D场景的基础,接着可以添加`Camera3D`来控制视角,使用`View3D`来显示场景。接下来,可以创建`Object3D...

    flex开源3D地图

    Flex开源3D地图是一种基于Adobe Flex技术的三维地图应用程序,它允许开发者构建交互式的、具有丰富视觉效果的3D地理信息系统。Flex是一个用于构建富互联网应用程序(RIA)的开源框架,它基于ActionScript编程语言和...

    flex 3D 例子及3D资源包

    Flex 3D是一种基于Adobe Flash Platform的开源框架,用于创建具有丰富三维(3D)图形效果的Web应用程序。这个框架允许开发者使用ActionScript 3.0编程语言来构建交互式的、高性能的3D用户界面。Flex 3D的全称是...

    flex3d效果展示

    Flex3D,全称为Adobe Flex 3D,是Adobe Flex框架的一个扩展,它允许开发者创建具有强大三维(3D)视觉效果的富互联网应用程序(RIA)。这个技术在2000年代中期非常流行,尤其在需要展示复杂数据或提供动态交互体验的...

    fireball_pv3d

    “.project”是Eclipse或Flex Builder项目的配置文件,“deploy”可能是发布目录,“.settings”存储了项目的编译和构建设置,“src”包含了源代码,“lib”包含外部依赖库,比如PV3D库本身。 6. 开发流程:在开发...

    pv3d加入Flex控件及创建热点(附部分代码)

    ### pv3d加入Flex控件及创建热点:深入解析与代码示例 #### 一、pv3d与Flex控件的结合:实现交互式3D场景 在Flash平台的辉煌时期,Papervision3D(简称pv3d)作为一款强大的3D引擎,为开发者提供了构建丰富3D体验...

    flex 超强3D Demo,令人震撼!

    标题中的“flex 超强3D Demo,令人震撼!”是指使用Adobe Flex技术构建的一个具有强烈视觉冲击力的三维演示程序。Flex是一个基于ActionScript和Flash Player的开源框架,主要用于开发富互联网应用程序(RIA)。这个...

    PV3d Papervision3d API文档+学习笔记+全景案例

    《PV3d Papervision3D API文档与全景案例解析》 Papervision3D(PV3D)是一款强大的开源3D图形引擎,专为Adobe Flash平台设计,支持ActionScript 3.0(AS3),是Flash AS3中实现3D效果的重要工具。在本文中,我们将...

    PV3D 黄色星球

    PV3D,全称为 Papervision3D,是一种基于Adobe Flex和ActionScript 3.0的开源三维图形渲染引擎。它为Flash平台提供了强大的3D图形处理能力,允许开发者在网页上创建交互式、高性能的3D应用。黄色星球项目可能是一个...

Global site tag (gtag.js) - Google Analytics