博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2d空间直线拟合as3源码和flash示例
阅读量:5048 次
发布时间:2019-06-12

本文共 1450 字,大约阅读时间需要 4 分钟。

在2d空间中,通过整合一些离散点, 拟合出表现这些点线性分布规律的直线

请见flash示例: 

源码片段:

//
        
/*
         * 直线拟合实现
         * @param            vs    是一个数组,包含若干待计算点(每一个点是{x:0,y:0}型的Object的对象)
         * @param            len    是vs数组的长度
         * @param            pa    是一个as3 Object对象->{x:0,y:0},是计算出来线段的第一个端点
         * @param            pb    是一个as3 Object对象->{x:0,y:0},是计算出来线段的第二个端点
         * *
*/
        
private function linearFitting(vs:Array,len:
int,pa:Object, pb:Object):
void {
            
var A:Number = sumVSY( vs );
            
var B:Number = sumVSX( vs );
            
//
            
var C:Number = sumVSXMultY( vs );
            
var D:Number = sumVSXMultX( vs );
            
            
//
 计算出直线的参数k和b(基于:y= k*x + b)
            
var k:Number = (A * B - len * C) / (B * B  - len * D);
            
var b:Number = (B * C - A * D) / (B * B - len * D);
            
//
            
var fr:Rectangle = DynamicDrawer.createByVS(vs);
            pa.x = fr.x;
            pb.x = fr.right;
            pa.y = k * pa.x + b;
            pb.y = k * pb.x + b;
        }
        
private function sumVSY(vs:Array):Number {
            
var len:
int = vs.length;
            
var tem:Number = 
0;
            
for (
var i:
int = 
0; i < len; i++) {
                tem += vs[i].y;
            }
            
return tem;
        }
        
private function sumVSX(vs:Array):Number {
            
var len:
int = vs.length;
            
var tem:Number = 
0;
            
for (
var i:
int = 
0; i < len; i++) {
                tem += vs[i].x;
            }
            
return tem;
        }
        
private function sumVSXMultY(vs:Array):Number {
            
var len:
int = vs.length;
            
var tem:Number = 
0;
            
for (
var i:
int = 
0; i < len; i++) {
                tem += vs[i].x * vs[i].y;
            }
            
return tem;
        }
        
private function sumVSXMultX(vs:Array):Number {
            
var len:
int = vs.length;
            
var tem:Number = 
0;
            
for (
var i:
int = 
0; i < len; i++) {
                tem += vs[i].x * vs[i].x;
            }
            
return tem;
        }

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

你可能感兴趣的文章
VueJS ElementUI el-table 的 formatter 和 scope template 不能同时存在
查看>>
Halcon一日一练:图像拼接技术
查看>>
Swift - RotateView
查看>>
iOS设计模式 - 中介者
查看>>
centos jdk 下载
查看>>
HDU 1028 Ignatius and the Princess III(母函数)
查看>>
(转)面向对象最核心的机制——动态绑定(多态)
查看>>
token简单的使用流程。
查看>>
django创建项目流程
查看>>
UIActionSheet 修改字体颜色
查看>>
Vue 框架-01- 入门篇 图文教程
查看>>
Spring注解之@Lazy注解,源码分析和总结
查看>>
多变量微积分笔记24——空间线积分
查看>>
Magento CE使用Redis的配置过程
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Mac 下的Chrome 按什么快捷键调出页面调试工具
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>