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

Заданы координаты трех вершин прямоугольника, необходимо определить координаты четвертой вершины

27.01.2016, 14:29. Показов 7193. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заданы координаты трех вершин прямоугольника. Необходимо определить координаты четвертой вершины.
Можете найти?

Добавлено через 1 минуту
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.01.2016, 14:29
Ответы с готовыми решениями:

Определить координаты четвёртой вершины прямоугольника
Помогите решить задачу,уже который день не могу написать код для решения этой задачи. Задача: Даны действительные числа...

Определить координаты четвертой вершины прямоугольника
Пусть даны координаты трех вершин прямоугольника. Определите координаты четвертой вершины.#include<stdio.h> #include<conio.h>...

Найти координаты четвертой вершины прямоугольника
Даны целочисленные координаты трех вершин прямоугольника, стороны которого параллельны координатным осям. Найти координаты его четвертой...

14
 Аватар для ThePlague
104 / 104 / 99
Регистрация: 30.06.2015
Сообщений: 272
27.01.2016, 14:42
wqe, ну если допустим координаты такие: a(1,1) b(1,5), c(10,1) получается что координаты последней вершины будут d(10,5)

просто берется значение "х" вершины "с" и значение "y" вершины "b"

в чем соль вопроса?
0
0 / 0 / 0
Регистрация: 15.12.2017
Сообщений: 11
14.07.2018, 08:12
Цитата Сообщение от ThePlague Посмотреть сообщение
в чем соль вопроса?
Стороны прямоугольника не обязательно параллельны осям координат.
0
Заблокирован
14.07.2018, 09:08
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    double d[][2]={{3,8},{9,5},{7,1}};//в любом,но в порядке обхода
    double x,y;
    if(d[0][1]==d[1][1])
    {
        x=d[0][0];
        y=d[2][1];
    }
    else
    {
        double a1=(d[0][1]-d[1][1])/(d[0][0]-d[1][0]);
        double b1=d[2][1]-a1*d[2][0];
        double a2=(d[1][1]-d[2][1])/(d[1][0]-d[2][0]);
        double b2=d[0][1]-a2*d[0][0];
        x=(b2-b1)/(a1-a2);
        y=a1*x+b1;
    }
    cout<<x<<" "<<y<<endl;
.... мда, тема то свежак
0
483 / 275 / 57
Регистрация: 08.10.2015
Сообщений: 1,188
15.07.2018, 03:55
Проверку на параллельность осям делать не стал (это нужно, чтобы не делить на 0, но поленился, оптимизацией также не увлекался). Порядок обхода не задается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
    double d[][2]={{9,5},{2,4},{8,2}};
    double x0,x1,x2,y0,y1,y2,a0,a1,a2,X,Y,eps=1e-10;
    bool FL=0;
  
   x0=d[0][0]-d[1][0];  y0=d[0][1]-d[1][1];
   x1=d[1][0]-d[2][0];  y1=d[1][1]-d[2][1];
   x2=d[2][0]-d[0][0];  y2=d[2][1]-d[0][1];
   a0=y0/x0;   a1=y1/x1;   a2=y2/x2;
   if(fabs(a0*a1+1)<eps) {X=d[0][0]-x1; Y=d[0][1]-y1;}
     else if(fabs(a0*a2+1)<eps) {X=d[2][0]-x0; Y=d[2][1]-y0;}
      else if(fabs(a1*a2+1)<eps) {X=d[1][0]-x2; Y=d[1][1]-y2;}
        else { cout<<" Не правильно заданы точки (не могут являться вершинами прямоугольника)"<<endl; FL=1;}
  if(!FL) cout<<X<<","<<Y<<endl;
  }
system("pause");
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
15.07.2018, 09:14
Прямоугольник ABCD
https://www.cyberforum.ru/cgi-bin/latex.cgi?\vec{AB} = \vec{DC} \\\vec{BC} = \vec{AD}
Откуда
D = C+(A-B)
Ну или в координатах
C
1
2
3
D.x = C.x + A.x - B.x;
D.y = C.y + A.y - B.y;
D.z = C.z + A.z - B.z;
0
483 / 275 / 57
Регистрация: 08.10.2015
Сообщений: 1,188
15.07.2018, 10:12
COKPOWEHEU, да, но это относится только к упорядоченной последовательности вершин.
Примените Ваш код, например к примеру выше (из#5) {A={9,5},B={2,4},C={8,2}}. Т.е. сначала надо упорядочить заданные точки, что потребует значительного количества условий типа if(x[i]>x[j]) и т.п. Возможно, может получиться и компактней, но я исходил (просто захотел) из условия использования координат точек "как есть", т.е. без какого-либо анализа их взаимного положения.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
15.07.2018, 15:36
Хорошо, можно и с дополнительными условиями.
C
1
2
3
4
5
6
ab = B-A;
ac = C-A;
bc = C-B;
if( ab*ac == 0 ) D = C + ab; //прямой угол A
  else if( ab*bc == 0 ) D = C - ab; //прямой угол B
  else D = A - bc; //прямой угол C
При желании можно развернуть работу с векторами в отдельные переменные, добавить проверку на 0 для дробных чисел, проверки и прочее.
В худшем случае код занимает 9 сложений (вычитаний) и 4 умножения
---
Если хочется добавить проверку корректности входных данных, добавится 1 сложение и 2 умножения
1
483 / 275 / 57
Регистрация: 08.10.2015
Сообщений: 1,188
15.07.2018, 16:51
COKPOWEHEU, да Ваше решение кажется более понятным и простым. Но попробуйте довести его до реального рабочего кода - будет ли он короче? И понятнее?
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
16.07.2018, 00:43
А чего там доводить-то?
Если писать по-человечески, то короче код не будет, из-за реализации двумерного вектора со скалярным произведением.
Собственно код нахождения четвертой точки не изменится, так что наглядность не пострадает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
 
class Vector2i{
public:
  int x,y;
  Vector2i(){}
  Vector2i(int _x, int _y){x=_x; y=_y;}
  Vector2i operator + (Vector2i v){Vector2i temp(x+v.x, y+v.y); return temp;}
  Vector2i operator - (Vector2i v){Vector2i temp(x-v.x, y-v.y); return temp;}
  int operator * (Vector2i v){return x*v.x + y*v.y;}
};
 
int main(){
  Vector2i a,b,c,d;
  printf("Input a(x,y), b(x,y), c(x,y)\n");
  scanf("%i%i", &a.x, &a.y);
  scanf("%i%i", &b.x, &b.y);
  scanf("%i%i", &c.x, &c.y);
  
  Vector2i ab = b-a;
  Vector2i ac = c-a;
  Vector2i bc = c-b;
  //скалярное произведение перпендикулярных векторов равно нулю. Таким способом ищем прямой угол
  if( ab*ac == 0 ) d = c+ab; //прямой угол A
    else if( ab*bc == 0 ) d = c-ab; //прямой угол B
    else if( ac*bc == 0 ) d = a-bc; //прямой угол C
    else {printf("Wrong input data\n"); return -1;} //прямых углов нет
  printf("%i %i\n", d.x, d.y);
}
Добавлено через 1 минуту
Нет, можно было, конечно, расписать по отдельным координатам, но с векторами оно нагляднее.
0
0 / 0 / 0
Регистрация: 04.09.2018
Сообщений: 21
13.10.2018, 17:35
COKPOWEHEU,

Спасибо за код!
С классами знаком от слова никак, прямо сейчас смотрю что это такое и с чем едят, понял что вы ввели класс вектора в плоскости с соответствующими координатами (x,y) и описали операции +/-/* для векторов
Объясните пожалуйста почему 10 строка по синтаксису отличается от 8 и 9
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
14.10.2018, 00:24
Вы имеете в виду почему возвращаемое значение у операторов сложения и вычитания имеют тип Vector2i, а у умножения (скалярного) - int?
1
0 / 0 / 0
Регистрация: 04.09.2018
Сообщений: 21
14.10.2018, 10:59
COKPOWEHEU,

Когда вы так ответили, то я понял что с точки зрения математики всё логично
С операциями понятно
Можно еще узнать, для чего написана 6 строка и для чего в 7 {x=_x; y=_y;}

Добавлено через 6 минут
Другими словами почему нельзя было написать Vector2i (int x, int y)?
0
Злостный нарушитель
 Аватар для Verevkin
10345 / 5763 / 1271
Регистрация: 12.03.2015
Сообщений: 26,617
14.10.2018, 12:13
Для начала предлагаю таки убедиться, что заданные 3 точки действительно являются вершинами прямоугольного треугольника!
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
14.10.2018, 13:03
Цитата Сообщение от afler Посмотреть сообщение
Можно еще узнать, для чего написана 6 строка и для чего в 7 {x=_x; y=_y;}
6 строка это конструктор без параметров.
x и y это поля класса, а _x, _y - аргументы конструктора, чтобы не путались друг с другом.
Цитата Сообщение от Verevkin Посмотреть сообщение
Для начала предлагаю таки убедиться, что заданные 3 точки действительно являются вершинами прямоугольного треугольника!
В смысле? Есть же эта проверка.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.10.2018, 13:03
Помогаю со студенческими работами здесь

Найти координаты четвертой вершины прямоугольника
Заданы координаты трех вершин прямоугольника. Необходимо определить координаты четвертой вершины. Входные данные Во входном файле...

Вычислить координаты четвертой вершины прямоугольника
Даны числа x1, y1, x2, y2, x3, y3 – координаты трёх каких-то вершин прямоугольника. Вычислить и напечатать координаты четвёртой вершины ...

Найти координаты четвертой вершины прямоугольника
У меня задание такое: Даны целочисленные координаты трех вершин прямоугольника, стороны которого параллельны координатным осям. Найти...

Введите цело численные координаты трех вершин прямоугольника
Введите цело численные координаты трех вершин прямоугольника,стороны которого паролельныкоординатным осям. Найти координаты ее четвертой...

Заданы координаты трех вершин прямоугольника. Необходимо определить координаты четвертой вершины
Здравствуйте, задача: Заданы координаты трех вершин прямоугольника. Необходимо определить координаты четвертой вершины. Входные...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru