GPS模拟
# include # include # include
using namespace std;
ifstream fin (\"1.txt\"); //ofstream fout (\"data_out.txt\");
// 1
4 double x[5] = {-1, 0, 300, 0, 300}; double y[5] = {-1, 450, 450, 0, 0}; double t[5]; double A, B, D,c = 2982000, p, r; double pi = 3.141592653; double xx, yy;
//三角形算法
void cal (int sign, double t1, double t2, double x1, double y1, double x2, double y2, double px, double py) {
double tt1 = c * t1, tt2 = c * t2;
double q, ac;
A = x2 * (x1*x1 + y1*y1x1 * (x2*x2 + y2*y2tt1*tt1)tt2*tt2);
D = tt1 * (x2*x2 + y2*y2tt2 * (x1*x1 + y1*y1ac;
r = (x1*x1 + y1*y10)
{
switch (h)
{
case 1:
cal (-1, t[2], t[4], 300, 0, 300, -450, 0, 450);
break;
case 2: cal (-1, t[1], t[3], -300, 0, -300, -450,300, 450);
break;
case 3: cal (1, t[1], t[2], 0, 450, 300, 450, 0, 0);
break;
case 4: cal (1, t[1], t[2], -300, 450, 0, 450, 300, 0);
break;
}
break;
} } system (\"pause\"); return 0; 声源定位
#include #include using namespace std; #define Max 50 int N=10; double xi[10]; double yi[10];
double ti[10][3]; double det(double a[Max][Max],int n)
{ int i,j,start; double k,temp,result=1; for(start=0;start
i=1;
while(a[start][start]==0&&start+i
{
for(j=start;j
{
temp=-1*a[start][j];
a[start][j]=a[start+i][j];
a[start+i][j]=temp;
}
i++;
}
if(start+i==n) continue;
for(i=start+1;i
{
k=a[i][start]/a[start][start];
for(j=start;j
a[i][j]=a[i][j]-k*a[start][j];
} } for(i=0;i
result*=a[i][i]; return result; } int equalation(double a[Max][Max+1],double r[Max],int n)
{ double det(double a[Max][Max],int n); double det0[Max][Max],det1[Max][Max]; int i,j,k;
for(i=0;i
for(j=0;j
det0[i][j]=a[i][j]; if(det(det0,n)==0) return 0;
for(k=0;k
for(i=0;i
for(j=0;j
{
det0[i][j]=a[i][j];
det1[i][j]=a[i][j];
}
for(i=0;i
det1[i][k]=a[i][n];
r[k]=det(det1,n)/det(det0,n); } return 1; } double sqr(double x) { return x*x; } double g(double x,double y,double c,double xi,double yi,double ti) { return sqr(xi-x)+sqr(yi-y)-sqr(c*ti); } double fx(double x,double y,double c,int k)
{ int i; double sum=0; for (i=0;i
sum+=g(x,y,c,xi[i],yi[i],ti[i][k-1])*(xi[i]-x); return sum; } double fy(double x,double y,double c,int k)
{ int i; double sum=0; for (i=0;i
sum+=g(x,y,c,xi[i],yi[i],ti[i][k-1])*(yi[i]-y); return sum; } double fc(double x,double y,double c,int k)
{ int i; double sum=0; for (i=0;i
sum+=g(x,y,c,xi[i],yi[i],ti[i][k-1])*sqr(ti[i][k-1]); return sum; } double fxx(double x,double y,double c,int k)
{ int i; double sum=0; for (i=0;i
sum=sum-2*sqr(xi[i]-x)-g(x,y,c,xi[i],yi[i],ti[i][k-1]); return sum; } double fxy(double x,double y,double c,int k) { int i; double sum=0; for (i=0;i
sum=sum-2*(yi[i]-y)*(xi[i]-x); return sum; } double fxc(double x,double y,double c,int k) { int i; double sum=0; for (i=0;i
sum=sum-2*c*sqr(ti[i][k-1])*(xi[i]-x); return sum; } double fyx(double x,double y,double c,int k) { int i; double sum=0; for (i=0;i
sum=sum-2*(xi[i]-x)*(yi[i]-y); return sum; } double fyy(double x,double y,double c,int k)
{ int i; double sum=0; for (i=0;i
sum=sum-2*sqr(yi[i]-y)-g(x,y,c,xi[i],yi[i],ti[i][k-1]); return sum; } double fyc(double x,double y,double c,int k) { int i; double sum=0; for (i=0;i
sum=sum-2*c*sqr(ti[i][k-1])*(yi[i]-y); return sum; } double fcx(double x,double y,double c,int k) { int i; double sum=0; for (i=0;i
sum=sum-2*(xi[i]-x)*sqr(ti[i][k-1]); return sum; } double fcy(double x,double y,double c,int k) { int i; double sum=0; for (i=0;i
sum=sum-2*(yi[i]-y)*sqr(ti[i][k-1]); return sum; } double fcc(double x,double y,double c,int k) { int i; double sum=0; for (i=0;i
sum=sum-2*c*sqr(sqr(ti[i][k-1])); return sum; } int main() { int i=0,k; double x,y,c,x0,y0,c0; double a[Max][Max+1],r[Max]; freopen (\"1.txt\", \"r\", stdin); freopen (\"1_out.txt\", \"w\", stdout);
for (i=0;i
} cin>>xi[i]>>yi[i]; xi[i] /= 10; yi[i] /= 10;
cin>>ti[i][0]>>ti[i][1]>>ti[i][2]; for(k=1;k>x>>y;
c=0.2; do {
x0=x;y0=y;c0=c;i++;
a[0][0]=fxx(x,y,c,k); a[0][1]=fxy(x,y,c,k); a[0][2]=fxc(x,y,c,k); a[1][0]=fyx(x,y,c,k); a[1][1]=fyy(x,y,c,k); a[1][2]=fyc(x,y,c,k); a[2][0]=fcx(x,y,c,k); a[2][1]=fcy(x,y,c,k); a[2][2]=fcc(x,y,c,k); a[0][3]=x*a[0][0]+y*a[0][1]+c*a[0][2]-fx(x,y,c,k); a[1][3]=x*a[1][0]+y*a[1][1]+c*a[1][2]-fy(x,y,c,k); a[2][3]=x*a[2][0]+y*a[2][1]+c*a[2][2]-fc(x,y,c,k);
if(equalation(a,r,3)==0) {
cout
return 0;
}
x=r[0];y=r[1];c=r[2]; } while(abs(x-x0)+abs(y-y0)+abs(c-c0)>=1e-6); cout