Derinlik Tespit Algoritması
Derinlik tespit algoritması, derinlik haritalarında tanımlanmış belli noktalardan yola çıkarak, verilen herhangi bir noktanın derinliğinin yaklaşık tespitini amaçlayan bir algoritmadır. Tanımlı en yakın n adet nokta ile bu noktaya ait uzaklıklara göre ters orantılı derinlik dağılımı yapar. Bu C++ kodu, Tübitak Proje Yarışması (2013) 'nda Model Devriye Uçağı'na entegre yazılmıştır. GPS sensöründen alınan koordinat bilgileri ile en yakın derinlik veritabanı haritasındaki noktaların ilişkilendirilmesini içerir.
Ekran Görüntüsü :
Kaynak Kodu :
//C++ Programming Language
//zafercavdar
#include <cstdlib>
#include <cstdio>
#include <cmath>
FILE *inputf = fopen("map_data.txt","r");
struct coordinate
{
double coordi_x;
double coordi_y;
double depth;
} gps[1000];
void readDatabase()
{
for (int a = 1 ; a <= 369 ; a++)
{
fscanf(inputf,"%lf",&gps[a].coordi_x);
fscanf(inputf,"%lf",&gps[a].coordi_y);
fscanf(inputf,"%lf",&gps[a].depth);
}
}
void getCoordi()
{
//bu fonksiyon gecicidir
//porttan alinan degerleri esleyecektir.
gps[0].coordi_x = 28.63166666;
gps[0].coordi_y = 40.78685904;
}
double findDepth()
{
double min_dist = 999999999999;
double min_dist2 = 99999999999;
double saveDepth ,saveDepth2 = 0;
for (int a = 1 ; a <= 369 ; a++)
{
double deltax = (gps[a].coordi_x - gps[0].coordi_x) * (gps[a].coordi_x - gps[0].coordi_x) ;
double deltay = (gps[a].coordi_y - gps[0].coordi_y) * (gps[a].coordi_y - gps[0].coordi_y) ;
double dist = sqrt(deltax + deltay);
if (dist < min_dist)
{
min_dist = dist;
saveDepth = gps[a].depth;
}
else if (dist < min_dist2)
{
min_dist2 = dist;
saveDepth2 = gps[a].depth;
}
}
double approDepth = ((saveDepth * min_dist2 ) + (saveDepth2 * min_dist)) / (min_dist + min_dist2);
return approDepth;
//printf("%lf %lf\n",min_dist,min_dist2);
}
int main()
{
readDatabase();
getCoordi();
printf("X : %lf \nY : %lf\nDepth : %lf meter\n",gps[0].coordi_x,gps[0].coordi_y,findDepth());
}
//zafercavdar
#include <cstdlib>
#include <cstdio>
#include <cmath>
FILE *inputf = fopen("map_data.txt","r");
struct coordinate
{
double coordi_x;
double coordi_y;
double depth;
} gps[1000];
void readDatabase()
{
for (int a = 1 ; a <= 369 ; a++)
{
fscanf(inputf,"%lf",&gps[a].coordi_x);
fscanf(inputf,"%lf",&gps[a].coordi_y);
fscanf(inputf,"%lf",&gps[a].depth);
}
}
void getCoordi()
{
//bu fonksiyon gecicidir
//porttan alinan degerleri esleyecektir.
gps[0].coordi_x = 28.63166666;
gps[0].coordi_y = 40.78685904;
}
double findDepth()
{
double min_dist = 999999999999;
double min_dist2 = 99999999999;
double saveDepth ,saveDepth2 = 0;
for (int a = 1 ; a <= 369 ; a++)
{
double deltax = (gps[a].coordi_x - gps[0].coordi_x) * (gps[a].coordi_x - gps[0].coordi_x) ;
double deltay = (gps[a].coordi_y - gps[0].coordi_y) * (gps[a].coordi_y - gps[0].coordi_y) ;
double dist = sqrt(deltax + deltay);
if (dist < min_dist)
{
min_dist = dist;
saveDepth = gps[a].depth;
}
else if (dist < min_dist2)
{
min_dist2 = dist;
saveDepth2 = gps[a].depth;
}
}
double approDepth = ((saveDepth * min_dist2 ) + (saveDepth2 * min_dist)) / (min_dist + min_dist2);
return approDepth;
//printf("%lf %lf\n",min_dist,min_dist2);
}
int main()
{
readDatabase();
getCoordi();
printf("X : %lf \nY : %lf\nDepth : %lf meter\n",gps[0].coordi_x,gps[0].coordi_y,findDepth());
}