?? eczx.cpp
字號(hào):
#include "math.h"
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <cstdlib>
#include <time.h>
#include <stdio.h>
#define Number_of_Initial_Beacon 200 /////設(shè)置信標(biāo)節(jié)點(diǎn)個(gè)數(shù)
#define Number_of_Second_Beacon 20 //設(shè)置第二次信標(biāo)節(jié)點(diǎn)個(gè)數(shù)
struct Position{//節(jié)點(diǎn)坐標(biāo)
double x;
double y;
};
struct Node{//包含RSSI值的完整節(jié)點(diǎn)信息
Position position;
double RSSI;
};
Node Beacon_Initial[Number_of_Initial_Beacon]; ///保存第一次信標(biāo)節(jié)點(diǎn)信息
Node Beacon_Second[Number_of_Second_Beacon];//保存第二次質(zhì)心計(jì)算時(shí)用到的信標(biāo)坐標(biāo)
Node Node_X; //未知節(jié)點(diǎn)X坐標(biāo)
Position First_Cent;//第一次質(zhì)心坐標(biāo)
Position Second_Cent;//第二次質(zhì)心坐標(biāo)
void Node_Initial(); //節(jié)點(diǎn)啟動(dòng)
void GetBeaconPosition( ); //根據(jù)未知節(jié)點(diǎn),獲取信標(biāo)節(jié)點(diǎn)信息
void Calcu_First_Cent( );// 計(jì)算第一次質(zhì)心
void SortBeacon( ); //根據(jù)RSSI值對(duì)第一次的質(zhì)心排序,選取離未知節(jié)點(diǎn)較近的節(jié)點(diǎn)
void Calcu_Second_Cent( ); // 計(jì)算第二次質(zhì)心
void main()
{
// int time;
// cout << "請(qǐng)輸入您想進(jìn)行的實(shí)驗(yàn)次數(shù):"<<endl;
// cin>>time;
// for (int i=0; i<time; i++)
// {
double distance1, distance2;
cout<< "本次實(shí)驗(yàn)采用的信標(biāo)節(jié)點(diǎn)個(gè)數(shù)為:" << Number_of_Initial_Beacon << endl
<< "第二次質(zhì)心計(jì)算時(shí)選取的信標(biāo)節(jié)點(diǎn)個(gè)數(shù)為:" << Number_of_Second_Beacon << endl<<endl;
Node_Initial();
GetBeaconPosition( );
Calcu_First_Cent( );
SortBeacon( );
Calcu_Second_Cent( );
distance1 = sqrt( ( First_Cent.x - Node_X.position.x ) * ( First_Cent.x - Node_X.position.x )
+ ( First_Cent.y - Node_X.position.y ) * ( First_Cent.y - Node_X.position.y ) );
distance2 = sqrt( ( Second_Cent.x - Node_X.position.x ) * ( Second_Cent.x - Node_X.position.x )
+ ( Second_Cent.y - Node_X.position.y ) * ( Second_Cent.y - Node_X.position.y ) );
cout<<"第一次質(zhì)心距節(jié)點(diǎn)真實(shí)位置的距離為:" << distance1 <<endl;
cout<<"第二次質(zhì)心距節(jié)點(diǎn)真實(shí)位置的距離為:" << distance2 <<endl<<endl;
printf ( "請(qǐng)ENTER鍵退出 " );
if ( getchar() != NULL ) exit(0);
// }//for
}
void Node_Initial()
{
srand( (unsigned)time( NULL ) );
Node_X.position.x = rand()%400 + 300;
Node_X.position.y = rand()%400 + 300;
cout<< "未知節(jié)點(diǎn)的坐標(biāo)為:" << "(" << Node_X.position.x << " , "
<< Node_X.position.y << ")" << endl<<endl;
}
void GetBeaconPosition ()
{
cout << "周?chē)艠?biāo)節(jié)點(diǎn)的坐標(biāo)及RSSI值為:"<<endl;
srand( (unsigned)time( NULL ) );
for (int i = 0; i < Number_of_Initial_Beacon; )
{
Beacon_Initial[i].position.x = rand()%1000;
Beacon_Initial[i].position.y = rand()%1000;
if( (Beacon_Initial[i].position.y < 300) || (Beacon_Initial[i].position.y > 700)
|| (Beacon_Initial[i].position.x <300) || (Beacon_Initial[i].position.x>700) )
{
cout << "(" << Beacon_Initial[i].position.x << " , "
<< Beacon_Initial[i].position.y << ")" << " ";
/////////////////計(jì)算RSSI的值
double x2 = Beacon_Initial[i].position.x;
double x1 = Node_X.position.x;
double y2 = Beacon_Initial[i].position.y;
double y1 = Node_X.position.y;
Beacon_Initial[i].RSSI = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
cout << 1000-Beacon_Initial[i].RSSI <<endl;
i++;
}//if
}//for
cout << endl;
}
void Calcu_First_Cent( )//計(jì)算第一次質(zhì)心
{
double sum_of_x = 0;
double sum_of_y = 0;
for( int i=0; i<Number_of_Initial_Beacon; i++)
{
sum_of_x = sum_of_x + Beacon_Initial[i].position.x;
sum_of_y = sum_of_y + Beacon_Initial[i].position.y;
}
First_Cent.x = sum_of_x / Number_of_Initial_Beacon;
First_Cent.y = sum_of_y / Number_of_Initial_Beacon;
cout << "第一次質(zhì)心計(jì)算的結(jié)果為:" << "(" << First_Cent.x <<" , "
<< First_Cent.y << ")"<<endl<<endl;
}
void SortBeacon( )// 按照RSSI從大到小把信標(biāo)節(jié)點(diǎn)排序
{
int i,j,k;
Node temp;
for( i=0; i<Number_of_Initial_Beacon; i++ )
{
int k = i;
for( j=i+1; j<Number_of_Initial_Beacon; j++ )
if(Beacon_Initial[j].RSSI < Beacon_Initial[k].RSSI ) k=j;
if(i!=k)
{ temp =Beacon_Initial[i]; Beacon_Initial[i] = Beacon_Initial[k]; Beacon_Initial[k] = temp;}
}
cout <<"根據(jù)RSSI值從大到小,第二次選取較近的信標(biāo)節(jié)點(diǎn)為:"<<endl;
for(i=0; i< Number_of_Second_Beacon; i++)
{
Beacon_Second[i] = Beacon_Initial[i];
cout<<"(" <<Beacon_Second[i].position.x<<" , "
<< Beacon_Second[i].position.y << ") " << 1000-Beacon_Second[i].RSSI <<endl;
}
cout <<endl<<endl;
}
void Calcu_Second_Cent( )
{
double sum_of_x2 = 0;
double sum_of_y2 = 0;
for( int i=0; i<Number_of_Second_Beacon; i++)
{
sum_of_x2 = sum_of_x2 + Beacon_Second[i].position.x;
sum_of_y2 = sum_of_y2 + Beacon_Second[i].position.y;
}
sum_of_x2 += Node_X.position.x;
sum_of_y2 += Node_X.position.y;
Second_Cent.x = sum_of_x2 / (Number_of_Second_Beacon+1);
Second_Cent.y = sum_of_y2 / (Number_of_Second_Beacon+1);
cout << "第二次質(zhì)心計(jì)算的結(jié)果為:" << "(" << Second_Cent.x <<" , "
<< Second_Cent.y << ")"<<endl<<endl;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -