已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
public class CoordTrans7Param public double, values=new double7,1; /dx,dy,dz,rx,ry,rz,k; /public double dx,dy,dz,rx,ry,rz,k; public void Set4Param(double dx,double dy,double dz,double k) this.dx=dx; this.dy=dy; this.dz=dz; this.k=k; this.rx=this.ry=this.rz=0; public void SetRotationParamRad(double rx,double ry,double rz) this.rx=rx; this.ry=ry; this.rz=rz; public void SetRotationParamMM(double rx,double ry,double rz) SetRotationParamRad(rx*Math.PI/648000,ry*Math.PI/648000,rz*Math.PI/648000); private double, GetMx() double , Mx=new double, 1,0,0, 0,Math.Cos(rx),Math.Sin(rx), 0,-Math.Sin(rx),Math.Cos(rx); return Mx; private double, GetMy() double , My=new double, Math.Cos(ry),0,-Math.Sin(ry), 0,1,0, Math.Sin(ry),0,Math.Cos(ry); return My; private double, GetMz() double , Mz=new double, Math.Cos(rz),Math.Sin(rz),0, -Math.Sin(rz),Math.Cos(rz),0, 0,0,1; return Mz; private double, GetM() /M=Mx*My*Mz? or M=Mz*My*Mx? double , M=new double3,3; MatrixTool.Multi(GetMz(),GetMy(),ref M); MatrixTool.Multi(M,GetMx(),ref M); return M; private double, GetMdx() double, mt = 0, 0, 0 , 0, -Math.Sin(rx), Math.Cos(rx) , 0, -Math.Cos(rx), -Math.Sin(rx) ; double, m=new double3,3; MatrixTool.Multi(GetMz(),GetMy(),ref m); MatrixTool.Multi(m,mt,ref m); return m; private double, GetMdy() double, mt = -Math.Sin(ry), 0, -Math.Cos(ry) , 0, 0, 0 , Math.Cos(ry), 0, -Math.Sin(ry) ; double, m=new double3,3; MatrixTool.Multi(GetMz(),mt,ref m); MatrixTool.Multi(m,GetMx(),ref m); return m; private double, GetMdz() double, mt = -Math.Sin(rz), Math.Cos(rz), 0 , -Math.Cos(rz), -Math.Sin(rz), 0 , 0, 0, 0 ; double, m=new double3,3; MatrixTool.Multi(mt,GetMy(),ref m); MatrixTool.Multi(m,GetMx(),ref m); return m; private double, specialMulti(double, m,double, X) int rowNumM=m.GetLength(0); int colNumM=m.GetLength(1); int rowNumX=X.GetLength(0); int colNumX=X.GetLength(1); int lines=rowNumX/colNumM; double, mt=MatrixTool.Init(rowNumM,colNumX); double, subX=MatrixTool.Init(colNumM,colNumX); double, res=MatrixTool.Init(rowNumM*lines,colNumX); for(int i=0;ilines;i+) MatrixTool.CopySub(X,i*colNumM,0,colNumM,colNumX,ref subX,0,0); MatrixTool.Multi(m,subX,ref mt); MatrixTool.CopySub(mt,0,0,rowNumM,colNumX,ref res,i*rowNumM,0); return res; private double, specialSub(double, m,double, X) int rowNumM=m.GetLength(0); int colNumM=m.GetLength(1); int rowNumX=X.GetLength(0); int colNumX=X.GetLength(1); int lines=rowNumX/rowNumM; double, subX=MatrixTool.Init(rowNumM,colNumX); double, res=MatrixTool.Init(rowNumX,colNumX); for(int i=0;irowNumX;i+=rowNumM) MatrixTool.CopySub(X,i,0,rowNumM,colNumX,ref subX,0,0); MatrixTool.Sub(m,subX,ref subX); MatrixTool.CopySub(subX,0,0,rowNumM,colNumX,ref res,i,0); return res; private double, GetF(double, X,double, Y) double, f0; double, qx=MatrixTool.Init(X.GetLength(0),1); double, K=-dx,-dy,-dz; double, S=1+k; MatrixTool.Multi(X,S,ref qx); double , M=GetM(); qx=specialMulti(M,qx); MatrixTool.Sub(qx,Y,ref qx); f0=specialSub(K,qx); return f0; private double, GetB(double, X) int rowNum=X.GetLength(0); double, B=MatrixTool.Init(rowNum,7); double, M=GetM(); double, Mdx=GetMdx(); double, Mdy=GetMdy(); double, Mdz=GetMdz(); double, mi=MatrixTool.Ident(3); double, MX,MY,MZ,MK; MK=specialMulti(M,X); MX=specialMulti(Mdx,X); MY=specialMulti(Mdy,X); MZ=specialMulti(Mdz,X); for(int i=0;irowNum;i+=3) MatrixTool.CopySub(mi,0,0,3,3,ref B,i,0); MatrixTool.CopySub(MX,0,0,rowNum,1,ref B,0,3); MatrixTool.CopySub(MY,0,0,rowNum,1,ref B,0,4); MatrixTool.CopySub(MZ,0,0,rowNum,1,ref B,0,5); MatrixTool.CopySub(MK,0,0,rowNum,1,ref B,0,6); return B; private double, GetA() double, M=GetM(); double, I2=MatrixTool.Ident(3); double, A=MatrixTool.Init(3,6); MatrixTool.MutliConst(ref I2,-1); MatrixTool.MutliConst(ref M,(1+k); MatrixTool.CopySub(M,0,0,3,3,ref A,0,0); MatrixTool.CopySub(I2,0,0,3,3,ref A,0,3); return A; private double, GetV(double, X,double, Y,CoordTrans7Param dpp) int rowNum=X.GetLength(0); double, B,F,A,B2,B3,F2,V; double, AT=MatrixTool.Init(6,3); A=GetA(); MatrixTool.AT(A,ref AT); MatrixTool.MutliConst(ref AT,1/(1+(1+k)*(1+k); F=GetF(X,Y); B=GetB(X); B2=MatrixTool.Init(3,7); B3=MatrixTool.Init(3,1); F2=MatrixTool.Init(rowNum,1); for(int i=0;irowNum/3;i+) MatrixTool.CopySub(B,i*3,0,3,7,ref B2,0,0); MatrixTool.Multi(B2,dpp.values,ref B3); MatrixTool.CopySub(B3,0,0,3,1,ref F2,i*3,0); MatrixTool.Sub(F,F2,ref F2); V=specialMulti(AT,F2); return V; public double CalculateTrans7Param(double, X,double, Y) int PtNum=X.GetLength(0)/3; double, B; double, F; double, BT=MatrixTool.Init(7,3*PtNum); double, BTB=MatrixTool.Init(7,7); double, BTF=MatrixTool.Init(7,1); /init pararm CoordTrans7Param dpp=new CoordTrans7Param(); Set4Param(0,0,0,0); this.SetRotationParamMM(0,0,0); /debug /this.TransCoord(X0,0,X1,0,X2,0,out x2,out y2,out z2); int round=0; while(round+20) F=GetF(X,Y); B=GetB(X); MatrixTool.AT(B,ref BT); MatrixTool.Multi(BT,B,ref BTB); MatrixTool.Inv(BTB); MatrixTool.Multi(BT,F,ref BTF); MatrixTool.Multi(BTB,BTF,ref dpp.values); if (dpp.isSmall() break; else MatrixTool.Add(this.values,dpp.values,ref this.values); /this.TransCoord(X0,0,X1,0,X2,0,out x2,out y2,out z2); double, V=GetV(X,Y,dpp); double vMax=-1; for(int i=0;ivMax) vMax=Math.Abs(Vi,0); return vMax; private bool isSmall() double s=0; for(int i=0;i7;i+) s+=Math.Abs(valuesi,0); if (s0.0000001) return true; else return false; public void TransCoord(double x1,double y1,double z1,out double x2,out double y2,out double z2) double, Xi=x1,y1,z1; double, DX=dx,d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 双鸭山市护士招聘面试题及答案
- 教师资格面试结构化试题及答案
- 26年宫颈癌靶向随访质控手册
- 26年公卫效果评估手册
- 大学操作系统试卷及答案
- 26年随访用药依从性评估指南
- 继发性乳糖缺乏护理查房
- 合同约定赠予协议书
- 宠物出院协议书模板
- 建房日照纠纷协议书
- 中国革命战争的战略问题(全文)
- 2024年江苏南京金陵中学特长生选拔考试数学试题(含答案详解)
- DB12T 1341-2024 消防产品使用和维护管理规范
- MOOC 质量管理学-中国计量大学 中国大学慕课答案
- 车间划线及颜色标准
- 中国超重肥胖营养专家共识
- 安吉热威电热科技有限公司年产4000万件电热元件生产线扩建项目环境影响报告表
- 人教版初中中考物理电学专题试题及答案详解
- GA 1807-2022核技术利用单位反恐怖防范要求
- GB/T 5330.1-2012工业用金属丝筛网和金属丝编织网网孔尺寸与金属丝直径组合选择指南第1部分:通则
- GA 676-2007警用服饰刺绣软肩章
评论
0/150
提交评论