Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 05.10.2017
Сообщений: 1
1

Сравнить две координаты

05.10.2017, 00:52. Показов 4733. Ответов 9

Author24 — интернет-сервис помощи студентам
Помогите , пожалуйста , сравнить две координаты и как их лучше задать. Пытался задать через struct , но не получается сравнить.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2017, 00:52
Ответы с готовыми решениями:

Как сравнить две строки?
Написал программу но не проходит сравнение вот это сравнение: bool flight_weight(char*...

Сравнить две строки (посимвольно)
Нужно написать функцию, которая сравнивает две заданные строки (посимвольно). Функция должна...

Сравнить две строки string
Добрый день Что имеется: vector<string> FIO; string temp; FIO формируется из темпов

Как сравнить две переменные string
Есть две переменные типа string в одной записано string X="AB BA AS AX"; В другой string...

9
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,719
05.10.2017, 10:15 2
А чем плохо просто сравнить каждую из координат?
C++
1
2
if(x1==x2 && y1==y2 && z1==z2)
   cout<<"Одинаковые";
0
680 / 190 / 60
Регистрация: 04.05.2012
Сообщений: 879
Записей в блоге: 1
05.10.2017, 10:19 3
ilyahantrue,
а координаты какие декартовы, полярные, сферические, цилиндрические?
А может вообще географические?

А что на выходе должно быть?
Хотелось бы подробнее задачу.
0
Mirmik
05.10.2017, 10:36
  #4

Не по теме:

Координата одномерна. Вы, вероятно, хотите сравнить что-то описываемое несколькими координатами, потому что координаты представляются числами и сравнение двух координат тривиально.

0
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
05.10.2017, 17:45 5
C++
1
2
3
4
5
6
7
8
9
10
11
struct pos {
   int x;
   int y;
   bool operator==(const pos &othe)
   { return this->x == othe.x && this->y == othe.y; }
}
 
////
pos A, B;
if (A == B) { ///
}
0
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
05.10.2017, 18:17 6
ilyahantrue,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct Point {
 
    double X, Y;
 
    Point(double x, double y) : X(x), Y(y) {}
 
    int compare(const Point &other) const {
        if(X > other.X) return 1;
        if(X < other.X) return -1;
        if(Y > other.Y) return 1;
        if(Y < other.Y) return -1;
        return 0;
    }
 
    bool operator == (const Point &other) const { return compare(other) == 0; }
    bool operator != (const Point &other) const { return compare(other) != 0; }
    bool operator <= (const Point &other) const { return compare(other) <= 0; }
    bool operator >= (const Point &other) const { return compare(other) >= 0; }
    bool operator < (const Point &other) const { return compare(other) < 0; }
    bool operator > (const Point &other) const { return compare(other) > 0; }
};
0
3882 / 2480 / 418
Регистрация: 09.09.2017
Сообщений: 10,891
05.10.2017, 19:28 7
Для double условие равенства почти никогда не будет выполнено, да и приоритет в сравнении абсциссы над ординатой не кажется логичным.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef D_EPS
#define D_EPS 1e-10
#endif
 
class Vector{
public:
  double x,y;
  double len(){return sqrt(x*x+y*y);} //длина вектора
  double len2(){return x*x+y*y;} //квадрат длины вектора (вычисляется быстрее предыдущего)
  bool operator == (Vector v){ return (abs(x-v.x)<D_EPS) && (abs(y-v.y)<D_EPS); }
  bool operator < (Vector v){return len2()<v.len2();}
...
};
0
Заклинатель змей
700 / 555 / 219
Регистрация: 30.04.2016
Сообщений: 2,591
05.10.2017, 21:07 8
woldemas, double так сравнивать не стоит из-за машинного представления floating-point numbers. Лучше пользоваться идеей вида
C++
1
2
3
if ( abs(a-b) <= машинный эпсилон){
   То а == б 
}
0
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
06.10.2017, 06:31 9
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
да и приоритет в сравнении абсциссы над ординатой не кажется логичным
Приоритет безразличен, просто для определенности. На практике, я бы сделал два метода с разными приоритетами, а перегруженными операторами вообще не пользовался.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Для double условие равенства почти никогда не будет выполнено
А оно и не нужно. Сравнивать double с заранее определенной точностью тоже не всегда правильно. Нужен метод, которому точность передается, при этом в общем случае разная по каждой координате.

DobroAlex В том, что я написал равенство наступает редко, зато можно сортировать точки, находить минимум и максимум и т.д. Очень полезно, например, при реализации построения выпуклой оболочки множества точек.
0
3882 / 2480 / 418
Регистрация: 09.09.2017
Сообщений: 10,891
06.10.2017, 10:40 10
Цитата Сообщение от woldemas Посмотреть сообщение
Приоритет безразличен,
Это же координаты, а не просто числа. Что больше, (1,2) или (2,1)?
Цитата Сообщение от woldemas Посмотреть сообщение
а перегруженными операторами вообще не пользовался.
Почему?
Цитата Сообщение от woldemas Посмотреть сообщение
Сравнивать double с заранее определенной точностью тоже не всегда правильно. Нужен метод, которому точность передается, при этом в общем случае разная по каждой координате
Координаты вряд ли будут сами по себе. Наверняка с ними предполагается какая-то работа, а значит младшие биты мантиссы уплывут даже если математически точки должны совпасть. Вот для этого и нужно вводить машинную точность.
Попадание точки в некоторый радиус относительно другой это отдельная задача для которой не обязательно писать отдельный метод.
C++
1
2
dv = v1-v2; //разумеется, придется перегрузить оператор вычитания
if( dv.len < radius )...
0
06.10.2017, 10:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2017, 10:40
Помогаю со студенческими работами здесь

Как сравнить две даты между собой?
Есть структура типа: struct date { unsigned int day, month, year; } Как сравнить две...

Сравнить две величины в разных единицах измерения
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { setlocale(LC_ALL,...

Как сравнить две строки типа string?
C типом char все просто. Поиск по Фамилии и имени. char name,name1,address, dom; int h=0; ...

Нужно сравнить две переменные типа string
Мне нужно сравнить 2 переменные типа string,нашел эту функцию,но почему то у меня выдает ошибку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru