Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2020, 21:21   #1
Alexander333
Пользователь
 
Регистрация: 06.10.2020
Сообщений: 19
Сообщение Пересечение квадратов на координатной площади

Задано два квадрата, стороны которых параллельны координатным осям. Выяснить, пересекаются они. Если да, то найти координаты левого нижнего и правого верхнего углов прямоугольника, является их сечением.

Коротко: нужно задать квадраты двумя вершинами, построить их и проверить пересекаются они, если да, то найти эти точки пересечения.
Alexander333 вне форума Ответить с цитированием
Старый 07.10.2020, 10:30   #2
petya11
Пользователь
 
Регистрация: 27.09.2019
Сообщений: 68
По умолчанию

Возьмите лист и постройте, причем здесь программирование?

П.с. или дайте ваш код, и спросите где в нем ошибка и как ее исправить.
petya11 вне форума Ответить с цитированием
Старый 07.10.2020, 11:26   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Квадрат задаётся вершинами, расположенными по диагонали? Иначе - неопределённость.
petya11 неправ. Задача требует пошевелить мозгами. С ходу - не так чтобы. Мне кажется так:
взять больший из квадратов и определить относительно его координаты всех вершин другого, это несложно. И если хотя бы одна вершина оказывается внутри, то пересекаются. Координаты прямоугольника пересечения - это уже следующий этап. всё тот же этап. Требуется исследовать все варианты расположения:
1. ни одна - не пересекаются,
2. все 4 - один квадрат внутри другого,
3...6 - одна внутри первого квадрата,
7..10 - две внутри первого квадрата
- итого 10 вариантов.

Вот кота покормлю и напишу.
Пы Сы Наконец-то преподы стали задавать интересные задания. А то всё: "Взять букву из этой строчки, вставить её в другую, а потом менять чётные с нечётными до опупения".

Последний раз редактировалось digitalis; 07.10.2020 в 12:12.
digitalis вне форума Ответить с цитированием
Старый 07.10.2020, 13:06   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
И если хотя бы одна вершина оказывается внутри
а если ВСЕ четыре?
Цитата:
взять больший из квадратов и определить относительно его
P.S. дочитал
Цитата:
2. все 4 - один квадрат внутри другого,
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 07.10.2020, 18:04   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Наконец-то преподы стали задавать интересные задания
Да нет, тривиальная задача.
Питон:
Код:
x5, x6 = max(x1, x3), min(x2, x4)
y5, y6 = max(y1, y3), min(y2, y4)
exists = x5 <= x6 and y5 <= y6
Где 1 и 2 - вершины первого квадрата, 3 и 4 - вершины второго квадрата, 5 и 6 - вершины пересечения.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 07.10.2020 в 23:39.
BDA вне форума Ответить с цитированием
Старый 07.10.2020, 22:49   #6
Alexander333
Пользователь
 
Регистрация: 06.10.2020
Сообщений: 19
По умолчанию

digitalis, Привет! Вот сам код: (но его нужно досовершенствовать.)

Код:
#include <iostream>
#include <limits>
 
using namespace std; 
  
// function to find intersection square of given two squares. 
void FindPoints(int x1, int y1, int x2, int y2, 
                int x3, int y3, int x4, int y4) 
{ 
    // gives bottom-left point 
    // of intersection square
    int x5 = max(x1, x3); 
    int y5 = max(y1, y3); 
  
    // gives top-right point 
    // of intersection square 
    int x6 = min(x2, x4); 
    int y6 = min(y2, y4); 
  
    // no intersection 
    if (x5 > x6 || y5 > y6) { 
        cout << "\nNo intersection between squares."; 
        return; 
    } 
    cout << ("\nThe squares intersect.\n");
    cout << ("Points of intersection: \n");
    cout << "(" << x5 << ", " << y5 << ") "; 
  
    cout << "(" << x6 << ", " << y6 << ") "; 
  
    // gives top-left point 
    // of intersection square
    int x7 = x5; 
    int y7 = y6; 
  
    cout << "(" << x7 << ", " << y7 << ") "; 
  
    // gives bottom-right point 
    // of intersection square
    int x8 = x6; 
    int y8 = y5; 
  
    cout << "(" << x8 << ", " << y8 << ") "; 
} 
  
// Driver code 
int main() 
{ 
    cout << ("Interesting task with squares\n\n");
    
    // bottom-left and top-right 
    // corners of first square 
    int x1, y1, x2, y2, x3, y3, x4, y4;
    
    
    
     calc:
    
    while(cin.fail()) {
       cout << "\nInvalid Input!" << endl;
       
       
       cin.clear();
       cin.ignore(numeric_limits<streamsize>::max(), '\n');
      goto calc;
    }
    
    
    char choice ='Y';
    bool valid = true;
 
    
    
    
    
    cout << ("Please, enter the coordinates.\n");
    cout << ("\nEnter the coordinates x1, y1, x2, y2 for the first square: ");
    cin >> x1 >> y1 >> x2 >> y2;
    cout << ("\nEnter the coordinates x3, y3, x4, y4 for the second square: ");
    cin >> x3 >> y3 >> x4 >> y4;

  
    // bottom-left and top-right 
    // corners of first square
    
  
    // function call 
    FindPoints(x1, y1, x2, y2, x3, y3, x4, y4); 
    
    
    while(valid){ // ask user to continue work
    cout << "\nWould you like to continue? (Y/N): " << endl;
    cin >> choice;
    if(choice =='N' || choice =='n'){
        break;
        }
            if(choice =='Y'||choice =='y'){
                goto calc;
        }
         else if(choice != 'N'&& choice != 'n'&&choice != 'Y'&&choice != 'y'){
                cout<<"Invalid input."<<endl;
                valid = true;
        }
    
    
    }
  
    return 0; 
}

Последний раз редактировалось BDA; 07.10.2020 в 23:16.
Alexander333 вне форума Ответить с цитированием
Старый 07.10.2020, 22:50   #7
Alexander333
Пользователь
 
Регистрация: 06.10.2020
Сообщений: 19
По умолчанию

BDA, Я так и делал, но не могу все возможные случаи реализовать.
Alexander333 вне форума Ответить с цитированием
Старый 07.10.2020, 22:53   #8
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Alexander333, это не первый форум где вы с этим не понятно от куда слямзенным кодом маячите..
Прислушайтесь к совету BDA..
I am not a wizard, I am just learning.

Последний раз редактировалось Desc; 07.10.2020 в 22:59. Причина: Выделил к кому обращение
Desc вне форума Ответить с цитированием
Старый 07.10.2020, 22:57   #9
Alexander333
Пользователь
 
Регистрация: 06.10.2020
Сообщений: 19
По умолчанию

Desc, код с иностранного сайта, но не полный. Например этот код не может определить когда один квадрат накладеный на другой.
Alexander333 вне форума Ответить с цитированием
Старый 07.10.2020, 23:02   #10
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Так Вы сами то видите что этот код делает?
Сравните алгоритм выполнения кода с поставленным Вами вопросом..
Элементарно запустите пошаговое выполнение кода в отладчике..

P. S.
По поставленной задаче необходимо осваивать "пересечение множеств", не зависимо от геометрической формы фигуры.
I am not a wizard, I am just learning.

Последний раз редактировалось Desc; 07.10.2020 в 23:11. Причина: Добавил P. S.
Desc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
построение координатной сетки невнимательный Помощь студентам 5 17.11.2020 00:17
Написать программу вычисления площади многоугольника используя формулу для вычисления площади треугольника в качестве подпрограммы сердце Паскаль, Turbo Pascal, PascalABC.NET 0 24.12.2012 18:21
Площади квадратов Arch0000 Помощь студентам 10 15.02.2009 19:41
Нарисовать на координатной площади линию a*x+b*y+c=0 НУБ!!! Общие вопросы Delphi 4 13.05.2008 22:48