AS3公式收集整理

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

角度制与弧度制的相互转换:
弧度 = 角度 * Math.PI / 180
角度 = 弧度 * 180 / Math.PI

计算两点间距离:
dx = x2 – x1;
dy = y2 – y1;
dist = Math.sqrt(dx*dx + dy*dy);

缓动公式:
sprite.x += (targetX - sprite.x) * easing;//easing为缓动系数变量
sprite.y += (targetY - sprite.y) * easing;

弹性公式:
vx += (targetX - sprite.x) * spring;//spring为弹性系数
vy += (targetY - sprite.y) * spring;
sprite.x += (vx *= friction);//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;

向鼠标旋转(或向某点旋转)
dx = mouseX - sprite.x;
dy = mouseY - sprite.y;
sprite.rotation = Math.atan2(dy, dx) * 180 / Math.PI;

波形运动:
public function onEnterFrame1(event:Event):void {
ball.y=centerScale+Math.sin(angle)*range;
angle+=speed;
}

心跳:
public function onEnterFrame1(event:Event):void {
ball.scaleX=centerScale+Math.sin(angle)*range;
ball.scaleY=centerScale+Math.sin(angle)*range;
angle+=speed;
}

圆心旋转:
public function onEnterFrame(event:Event):void {
ball.x=centerX+Math.cos(angle)*radius;
ball.y=centerY+Math.sin(angle)*radius;
angle+=speed;
}

椭圆旋转:
public function onEnterFrame(event:Event):void {
ball.x=centerX+Math.cos(angle)*radiusX;
ball.y=centerY+Math.sin(angle)*radiusY;
angle+=speed;
}

颜色运算得到透明值:
var t:uint=0×77ff8877
var s:uint=0xff000000
var h:uint=t&s
var m:uint=h>>>24
trace(m)

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

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

按位计算得到颜色值:
color24 = red << 16 | green << 8 | blue;
color32 = alpha << 24 | red << 16 | green << 8 | blue;

过控制点的曲线:
// xt, yt是你想要让曲线通过的那一点
// x0, y0 和x2, y2 是曲线的终点
//PS.发现很多人转帖都是直接复制粘贴,也不翻译一下
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;

移除出界对象:

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;

动量守恒的 ActionScript 表达式,短形:

var vxTotal:Number = vx0 - vx1;
vx0 = ((ball0.mass - ball1.mass) * vx0 + 2 * ball1.mass * vx1) /
(ball0.mass + ball1.mass);
vx1 = vxTotal + vx0;

万有引力:

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

余弦定理:

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);
等比缩放:
var _scaleNum:Number = _resizeWidth / _originalWidth;
_mc.scaleX = _mc.scaleY = _scaleNum;
<think>好的,用户想了解CPK公式的计算方法和在统计过程控制(SPC)中的应用场景。首先我需要回忆CPK的基本概念,确保自己理解正确。CPK是过程能力指数,用于衡量一个过程在稳定状态下满足规格要求的能力。用户提到了SPC,所以需要将CPK与SPC联系起来,说明它在其中的作用。 接下来,我需要整理CPK的计算公式。CPK的计算涉及几个关键参数:规格上限(USL)、规格下限(LSL)、过程均值(μ)和过程标准差(σ)。公式应该是取CPU和CPL中的最小值,其中CPU = (USL - μ)/(3σ),CPL = (μ - LSL)/(3σ)。因此CPK = min(CPU, CPL)。这个公式的正确性需要确认,避免错误。同时要注意,如果只有单边规格,比如只有USL或LSL,计算方式会不同,这点可能需要提及。 然后,考虑计算步骤。用户可能需要具体的步骤说明,比如先计算均值,再计算标准差,然后确定规格上下限,最后代入公式。需要分步骤详细说明,确保清晰易懂。同时,要提到过程稳定性的前提,因为CPK的有效性依赖于过程处于统计控制状态,否则计算结果不可靠。 关于应用场景,用户可能想知道在哪些情况下使用CPK,比如制造业的质量控制、产品验收、过程改进等。需要举例说明,比如在汽车零部件生产中监控尺寸精度,确保符合客户规格。同时,可以引用提到的引用[1]中关于SPC的作用,说明CPK作为其中的关键指标如何帮助维持过程受控。 此外,用户的需求可能还涉及如何解读CPK值,比如不同数值代表的过程能力水平(如CPK≥1.33表示过程能力充足)。需要解释这些标准,帮助用户理解结果的意义。可能还需要提到CP与CPK的区别,强调CPK考虑了过程中心位置的影响,而CP只考虑规格范围和过程变异,因此CPK更能反映实际能力。 在回答中需要引用提供的参考文献,特别是引用[2]和[3],其中引用[2]提到了C#类库用于计算CPK,引用[3]解释了CPK的意义。要自然地融入这些引用,增强回答的可信度。例如,在说明计算公式时,可以提到引用[2]提供的工具类实现了这些计算,或者引用[3]对CPK值的解释。 还需要考虑用户可能的后续问题,比如数据收集的要求、如何提高CPK值、与PPK的区别等。虽然用户当前的问题集中在计算方法和应用,但预先准备这些相关信息可以提升回答的全面性。不过根据用户指示,相关问题部分已经生成,所以需要在最后部分提出相关问题,引导用户深入探讨。 最后,确保回答结构清晰,分点说明计算步骤和应用场景,使用中文,数学公式用$$...$$格式,行内公式用$...$。检查LaTeX语法是否正确,例如标准差σ的正确表示,上下标是否正确。避免使用Markdown格式,保持回答自然流畅。</think>### CPK公式详解 #### 一、CPK定义与作用 CPK(制程能力指数)是统计过程控制(SPC)中衡量生产过程稳定性和满足规格能力的核心指标[^1]。其值越大,表明过程输出越集中、波动越小,且接近目标中心值。 #### 二、计算公式 CPK计算公式为: $$C_{pk} = \min\left( \frac{USL - \mu}{3\sigma}, \frac{\mu - LSL}{3\sigma} \right)$$ 其中: - $USL$:规格上限 - $LSL$:规格下限 - $\mu$:过程数据均值 - $\sigma$:过程标准差 #### 三、计算步骤 1. **数据收集**:采集稳定生产状态下的样本数据(通常≥30个) 2. **计算均值**: $$\mu = \frac{\sum_{i=1}^{n}x_i}{n}$$ 3. **计算标准差**: $$\sigma = \sqrt{\frac{\sum_{i=1}^{n}(x_i - \mu)^2}{n-1}}$$ 4. **确定规格限**:根据产品要求获取$USL$和$LSL$ 5. **代入公式**:分别计算$C_{pu}$和$C_{pl}$,取较小值作为最终$C_{pk}$ #### 四、应用场景 1. **质量评估**:判断生产过程是否满足客户规格要求(如$C_{pk}≥1.33$为良好水平)[^3] 2. **过程改进**:通过分析$C_{pk}$值定位波动源(如设备精度不足) 3. **验收决策**:用于新产品试产阶段的工艺验证 4. **持续监控**:结合控制图实现SPC实时管理[^1] #### 五、注意事项 - **稳定性前提**:计算前需通过控制图确认过程稳定 - **数据类型**:仅适用于连续型计量数据 - **规格完整性**:需同时定义上下限(单边规格时采用$C_p$) - **工具支持**:可使用专用工具(如引用[2]的C#类库)自动计算 ```python # CPK计算示例代码 import numpy as np def calculate_cpk(data, usl, lsl): mean = np.mean(data) std = np.std(data, ddof=1) # 样本标准差 cpu = (usl - mean) / (3 * std) cpl = (mean - lsl) / (3 * std) return min(cpu, cpl) # 示例数据 data = [4.8, 5.1, 5.0, 5.2, 4.9] print(f"CPK值:{calculate_cpk(data, usl=5.5, lsl=4.5):.2f}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值