没有合适的资源?快使用搜索试试~ 我知道了~
C# 测量程序的一些基本类
需积分: 21 18 下载量 25 浏览量
2010-12-11
10:44:13
上传
评论
收藏 412KB DOC 举报
温馨提示
试读
55页
自己编的c#大地测量中的一些代码,高斯投影正反算,水准网平差,角弧转化,方位角计算,坐标系转化
资源推荐
资源详情
资源评论
完成的类
using System;
using System.Collections.Generic;
using System.Text;
namespace ClassLibrary3
{
public class cejiao_jiao
{
public double cj_j(double jiao)
{
jiao = Math.Abs(jiao);
int du = (int)(Math.Floor(jiao));
jiao = (jiao - du) * 100;
int fen = (int)(Math.Floor(jiao));
jiao = (jiao - fen) * 100;
int miao = (int)(Math.Floor(jiao));
jiao = du + fen / 60 + miao / 3600;
return jiao;
}
}
public class cejiao_jiaomiao
{
public double cj_j(double jiao)
{
jiao = Math.Abs(jiao);
int du = (int)(Math.Floor(jiao));
jiao = (jiao - du) * 100;
int fen = (int)(Math.Floor(jiao));
jiao = (jiao - fen) * 100;
int miao = (int)(Math.Floor(jiao));
jiao = du * 3600 + fen * 60 + miao;
return jiao;
}
}
public class h_j
{
public double HUDU_to_JIAODU(double dd)/////////弧度化测角
{
double a = dd;
a = a * 57.2957795130823;
int d = (int)System.Math.Floor(a);
a = a - d;
a = a * 60;
int f = (int)System.Math.Floor(a);
a = a - f;
a = a * 60;
if (a + 0.0001 > 60) { a = 0; f = f + 1; }
if (f >= 60) { f = 0; d = d + 1; }
a = d + f / 100.0 + a / 10000.0;
return a;
}
}
public class j_h
{
public double JIAO_HUDU(double jiao)/////测角化弧度
{
int d = (int)(Math.Floor(jiao));
jiao = jiao - d;
int f = (int)(Math.Floor(jiao * 100.0));
jiao = jiao * 100 - f;
double m = jiao * 100.0;
jiao = d * 3600.0 + f * 60.0 + m;
double hudu = jiao / 206264.806247096263;
return hudu;
}
}
public class fwj
{
public double jisuan(double x1, double y1, double x2, double y2)
{
double cx, cy, cc;
cx = x2 - x1;
cy = y2 - y1;
if (cx == 0 && cy == 0)
return -1;
else
{
if (cx == 0)
{
if (cy > 0)
cc = Math.PI / 2.0;
else
cc = Math.PI * 1.5;
}
else
cc = Math.Atan2(cy, cx);
if (cy < 0 && cx != 0)
cc = cc + Math.PI;
return cc;
}
}
}
public class Gaosi
{
public const double rou = 206264.806247096263;
private double b, c, e, ep, t, l, M, N, g2, CSB, SINB, X;
private double m0, m2, m4, m6, m8, n0, n2, n4, n6, n8, beita0, beita2, beita4, beita6,
beita8;
public double zhengsuan(double a, double alf, double B, double L, double L0, out double
y)/////B为弧度,L为秒,L0也为数学上的角度表示
{
//L = L * 3600;///////////
L0 = L0 * 3600;//////////////度化为秒
b = a - a * alf;
e = Math.Sqrt(a * a - b * b) / a;
ep = Math.Sqrt(a * a - b * b) / b;
c = a * a / b;
t = Math.Tan(B);
CSB = Math.Cos(B);
SINB = Math.Sin(B);
g2 = ep * ep * CSB * CSB;
m0 = a * (1 - e * e);
m2 = 3.0 / 2.0 * e * e * m0;
m4 = 5.0 / 4.0 * e * e * m2;
m6 = 7.0 / 6.0 * e * e * m4;
m8 = 9.0 / 8.0 * e * e * m6;
n0 = a;
n2 = 1.0 / 2.0 * e * e * n0;
n4 = 3.0 / 4.0 * e * e * n2;
n6 = 5.0 / 6.0 * e * e * n4;
n8 = 7.0 / 8.0 * e * e * n6;
M = m0 + m2 * SINB * SINB + m4 * SINB * SINB * SINB * SINB + m6 * SINB * SINB *
SINB * SINB * SINB * SINB + m8 * SINB * SINB * SINB * SINB * SINB * SINB * SINB * SINB;
N = n0 + n2 * SINB * SINB + n4 * SINB * SINB * SINB * SINB + n6 * SINB * SINB * SINB *
SINB * SINB * SINB + n8 * SINB * SINB * SINB * SINB * SINB * SINB * SINB * SINB;
l = L - L0;
beita0 = 1.0 - 3.0 / 4.0 * ep * ep + 45.0 / 64.0 * ep * ep * ep * ep - 175.0 / 256.0 * ep *
ep * ep * ep * ep * ep + 11025.0 / 16384.0 * ep * ep * ep * ep * ep * ep * ep * ep;
beita2 = beita0 - 1.0;
beita4 = 15.0 / 32.0 * ep * ep * ep * ep - 175.0 / 384.0 * ep * ep * ep * ep * ep * ep +
3675.0 / 8192.0 * ep * ep * ep * ep * ep * ep * ep * ep;
beita6 = -35.0 / 96.0 * ep * ep * ep * ep * ep * ep + 735.0 / 2048.0 * ep * ep * ep * ep *
ep * ep * ep * ep;
beita8 = 315.0 / 1024.0 * ep * ep * ep * ep * ep * ep * ep * ep;
X = c * (beita0 * B + (beita2 * CSB + beita4 * CSB * CSB * CSB + beita6 * CSB * CSB *
CSB * CSB * CSB + beita8 * CSB * CSB * CSB * CSB * CSB * CSB * CSB) * SINB);
double x;
x = X + N / 2.0 / rou / rou * SINB * CSB * l * l + N / 24.0 / rou / rou / rou / rou * SINB *
CSB * CSB * CSB * (5.0 - t * t + 9.0 * g2 + 4.0 * g2 * g2) * l * l * l * l + N / 720 / rou / rou / rou /
rou / rou / rou * SINB * CSB * CSB * CSB * CSB * CSB * (61.0 - 58.0 * t * t + t * t * t * t) * l * l * l
* l * l * l;
y = N / rou * CSB * l + N / (6.0 * rou * rou * rou) * CSB * CSB * CSB * (1.0 - t * t + g2) * l
* l * l + N / (120.0 * rou * rou * rou * rou * rou) * CSB * CSB * CSB * CSB * CSB * (5.0 - 18.0 * t *
t + t * t * t * t + 14 * g2 - 58.0 * g2 * t * t) * l * l * l * l * l;
return x;
}
public double daN(double a, double alf, double B)
{
b = a - a * alf;
e = Math.Sqrt(a * a - b * b) / a;
n0 = a;
n2 = 1.0 / 2.0 * e * e * n0;
n4 = 3.0 / 4.0 * e * e * n2;
n6 = 5.0 / 6.0 * e * e * n4;
n8 = 7.0 / 8.0 * e * e * n6;
N = n0 + n2 * SINB * SINB + n4 * SINB * SINB * SINB * SINB + n6 * SINB * SINB * SINB *
SINB * SINB * SINB + n8 * SINB * SINB * SINB * SINB * SINB * SINB * SINB * SINB;
return N;
}
public double gama(double a, double alf,double B, double L, double L0)//,B为弧度L,l0为弧度
{
double tan_gama;
double gama;
b = a - a * alf;
ep = Math.Sqrt(a * a - b * b) / b;
t = Math.Tan(B);
CSB = Math.Cos(B);
SINB = Math.Sin(B);
g2 = ep * ep * CSB * CSB;
l = L - L0;
tan_gama = SINB * l + 1.0 / 3.0 * (1 + t * t + 3 * g2 + 2 * g2 * g2) * SINB * CSB * CSB *
l * l * l + 1.0 / 15.0 * (2 + 4 * t * t + 2 * t * t * t * t) * SINB * CSB * CSB * CSB * CSB * l * l * l * l *
l * l;
gama = Math.Atan(tan_gama);
return gama;
}
}
public class fansuan
{
private double b, c, e, ep, l;
private double B, Bf, Bf1, CSBf, SINBf, Mf, Nf, g2f, tf, fbf;
private double m0, m2, m4, m6, m8, n0, n2, n4, n6, n8, beita0, beita2, beita4, beita6,
beita8;
public double fansuan_B(double a, double alf, double L0, double x, double y, out double
L)////////L0用测角表示,算出的B,L为弧度
{
b = a - a * alf;
e = Math.Sqrt(a * a - b * b) / a;
ep = Math.Sqrt(a * a - b * b) / b;
c = a * a / b;
m0 = a * (1 - e * e);
m2 = 3.0 / 2.0 * e * e * m0;
m4 = 5.0 / 4.0 * e * e * m2;
m6 = 7.0 / 6.0 * e * e * m4;
m8 = 9.0 / 8.0 * e * e * m6;
n0 = a;
n2 = 1.0 / 2.0 * e * e * n0;
n4 = 3.0 / 4.0 * e * e * n2;
n6 = 5.0 / 6.0 * e * e * n4;
n8 = 7.0 / 8.0 * e * e * n6;
beita0 = 1.0 - 3.0 / 4.0 * ep * ep + 45.0 / 64.0 * ep * ep * ep * ep - 175.0 / 256.0 * ep *
ep * ep * ep * ep * ep + 11025.0 / 16384.0 * ep * ep * ep * ep * ep * ep * ep * ep;
beita2 = beita0 - 1;
beita4 = 15.0 / 32.0 * ep * ep * ep * ep - 175.0 / 384.0 * ep * ep * ep * ep * ep * ep +
3675.0 / 8192.0 * ep * ep * ep * ep * ep * ep * ep * ep;
beita6 = -35.0 / 96.0 * ep * ep * ep * ep * ep * ep + 735 / 2048 * ep * ep * ep * ep * ep
* ep * ep * ep;
beita8 = 315.0 / 1024.0 * ep * ep * ep * ep * ep * ep * ep * ep;
Bf = x / c / beita0;
for (int i = 0; i < 10000; i++)
{
tf = Math.Tan(Bf);
CSBf = Math.Cos(Bf);
SINBf = Math.Sin(Bf);
g2f = ep * ep * CSBf * CSBf;
fbf = c * (beita2 * CSBf + beita4 * CSBf * CSBf * CSBf + beita6 * CSBf * CSBf * CSBf *
CSBf * CSBf + beita8 * CSBf * CSBf * CSBf * CSBf * CSBf * CSBf * CSBf) * SINBf;
Bf1 = (x - fbf) / c / beita0;
if (Math.Abs(Bf - Bf1) < 1e-10)
break;
Bf = Bf1;
}
j_h jhl0 = new j_h();
L0 = jhl0.JIAO_HUDU(L0);
Mf = m0 + m2 * SINBf * SINBf + m4 * SINBf * SINBf * SINBf * SINBf + m6 * SINBf *
SINBf * SINBf * SINBf * SINBf * SINBf + m8 * SINBf * SINBf * SINBf * SINBf * SINBf * SINBf *
SINBf * SINBf;
Nf = n0 + n2 * SINBf * SINBf + n4 * SINBf * SINBf * SINBf * SINBf + n6 * SINBf * SINBf *
SINBf * SINBf * SINBf * SINBf + n8 * SINBf * SINBf * SINBf * SINBf * SINBf * SINBf * SINBf *
SINBf;
B = Bf - tf * y * y / 2 / Mf / Nf / CSBf + tf / (24 * Mf * Nf * Nf * Nf) * (5 + 3 * tf * tf + g2f -
9 * g2f * tf * tf) * y * y * y * y - tf / (720 * Mf * Nf * Nf * Nf * Nf * Nf) * (61 + 90 * tf * tf + 45 * tf
* tf * tf * tf) * y * y * y * y * y * y;
l = 1 / Nf / CSBf * y - 1 / (6 * Nf * Nf * Nf * CSBf) * (1 + 2 * tf * tf + g2f) * y * y * y + 1 /
(120 * Nf * Nf * Nf * Nf * Nf * CSBf) * (5 + 28 * tf * tf + 24 * tf * tf * tf * tf + 6 * g2f + 8 * g2f * tf
* tf) * y * y * y * y * y;
L = l + L0;
return B;
}
}
public class zuobiaoxi
{
private double b, c, e, COSB, COSL, SINL, SINB, N;
double vv, cc, kk, nn;
public void blh_xyz(double a, double alf, double B, double L, double H, out double X, out
double Y, out double Z)//B,L都用测角
{
j_h newjhqiun = new j_h();
B = newjhqiun.JIAO_HUDU(B);//测角化弧度
L = newjhqiun.JIAO_HUDU(L);//测角化弧度
Gaosi qiuN = new Gaosi();
N = qiuN.daN(a, alf, B);//求大N
b = a - a * alf;
e = Math.Sqrt(a * a - b * b) / a;
c = a * a / b;
COSB = Math.Cos(B);
SINB = Math.Sin(B);
SINL = Math.Sin(L);
COSL = Math.Cos(L);
X = (N + H) * COSB * COSL;
Y = (N + H) * COSB * SINL;
vv = (1 - e * e);
cc = N * vv;
Z = ((N * (1.0 - e * e)) + H) * SINB;
nn = Z / SINB;
kk = nn - cc;
}
public void xyz_blh(double a, double alf, out double B, out double L, out double H, double
X, double Y, double Z)//BL为测角
{
b = a - a * alf;
e = Math.Sqrt(a * a - b * b) / a;
c = a * a / b;
L = Math.Atan2(Y, X);
B = Math.Atan2(Z, Math.Sqrt(X * X + Y * Y));
SINB = Math.Sin(B);
Gaosi qiuN = new Gaosi();
N = qiuN.daN(a, alf, B);
for (int i = 0; i < 100000; i++)
{
SINB = Math.Sin(B);
b = Math.Atan2(Z + N * e * e * SINB, Math.Sqrt(X * X + Y * Y));
if (Math.Abs(b - B) < 1e-10)
剩余54页未读,继续阅读
资源评论
qq379797807
- 粉丝: 25
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功