该项目应该接受用户输入的多个位置的坐标,然后比较距离并说明它们的距离。
我在与彼此交流时遇到问题。
#include <iostream>
#include "bigfunction.hpp"
#include "coord.hpp"
#include "dest.hpp"
int main()
{
distloop();
return 0;
}
#include "bigfunction.hpp"
#include "coord.hpp"
#include "dest.hpp"
double convertRadians(double deg)
{
double pi,radians;
pi = 3.1459265;
radians = pi * (deg/180.0);
return radians;
}
void distloop(void)
{
Dest start,far,closest;
std::string shortest, currentloc, farthest;
int counter;
double distance, max, min;
max = 0;
min = 0;
std::getline(std::cin,currentloc);
makeDest(start,currentloc);
std::cin >> counter;
std::cin.ignore(1);
for (int i=0; i < counter;i++) {
std::getline(std::cin,currentloc);
distance = findDist(start,currentloc);
if (min==0) {
min = distance;
shortest = currentloc;
}
if (distance > max) {
max = distance;
farthest = currentloc;
}
if (distance < min) {
min = distance;
shortest = currentloc;
}
}
makeDest(far, farthest);
makeDest(closest,shortest);
std::cout<<"Start Loc"<< strDest(start) <<std::endl;
std::cout<<"Closest Loc"<< strDest(closest) << " (" << min << "miles)" << std::endl;
std::cout<<"Farthest Loc"<< strDest(far) << " (" << max << "miles)" << std::endl;
}
#include <string>
#include <cmath>
#ifndef BIGFUNCTION_HPP
#define BIGFUNCTION_HPP
#include "dest.hpp"
#include "coord.hpp"
double convertRadians(double deg);
void distloop(void);
#endif
#include "dest.hpp"
#include "bigfunction.hpp"
#include "coord.hpp"
double findDist(Dest &dest, std::string location)
{
double RAD = 3959.9;
double dlat,dlong,a,c,dist;
double lat2 = getLatitude(getField(location,1));
double long2 = getLongitude(getField(location,2));
dlat = dest.lat - lat2;
dlong = dest.longt - long2;
a = ((sin(convertRadians(dlat/2.0)))*(sin(convertRadians(dlat/2.0)))) + (cos(convertRadians(dest.lat))*cos(convertRadians(lat2)) * sin(convertRadians(dlong/2.0)))*(sin(convertRadians(dlong/2.0)));
c = 2 *atan2(sqrt(a),sqrt(1-a));
dist = RAD * c;
return dist;
}
std::string strDest(Dest &dest)
{
std::string prtStr;
prtStr = dest.latstring + " " + dest.longstring + " ("+ dest.name + ")";
return prtStr;
}
void parseCoor(Dest &dest)
{
dest.lat = getLatitude(dest.latstring);
dest.longstring = getLongitude(dest.longstring);
}
#include <string>
#include <cmath>
#ifndef DEST_HPP
#define DEST_HPP
struct Dest
{
double lat, longt;
std::string latstring,longstring, name;
};
void parseCoord(Dest &dest);
//void makeDest(Dest &dest, std::string location);
double findDist(Dest &dest, std::string location);
std::string strDest(Dest &dest);
#endif
#include "bigfunction.hpp"
#include "coord.hpp"
#include "dest.hpp"
std::string getField(std::string location, int field)
{
int m = 0;
int s = 0;
int e = -1;
std::string info;
for (int i = 0; i < location.length(); i++) {
if (location[i] == ' ') {
m++;
s = e + 1;
e = i;
}
if (m == field) {
if (field > 2) {
info = location.substr(s, location.length());
return info;
} else {
info = location.substr(s, e - s);
return info;
}
} else {
return info;
}
}
return info;
}
double getLatitude(std::string latit)
{
char d = latit.at(latit.length()-1);
double latt;
if(d == 'S') {
latt = -1 * std::stod(latit.substr(0,latit.length()-2));
} else {
latt = std::stod(latit.substr(0,latit.length()-2));
}
return latt;
}
double getLongitude(std::string longit)
{
double longt;
char d = longit.at(longit.length()-1);
if(d == 'E') {
longt = std::stod(longit.substr(0,longit.length()-2));
} else {
longt = -1 * std::stod(longit.substr(0,longit.length()-2));
}
return longt;
}
#include <string>
#include <iostream>
#include <cmath>
#ifndef COORD_HPP
#define COORD_HPP
std::string getField(std::string location,int field);
double getLongitude(std::string longit);
double getLatitude(std::string latit);
#endif