Даны три координаты прямоугольника как найти четвертую

Timon55

0 / -1 / 0

Регистрация: 25.07.2017

Сообщений: 10

1

По трём вершинам прямоугольника определить четвёртую

28.08.2017, 05:14. Показов 3520. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Есть программа,которая по заданным координатам трёх вершин определяет координаты четвертой. Я не могу понять как она работает, ну то есть сам алгоритм нахождения координат четвертой вершины. Подскажите кому не трудно. Заранее благодарен.

Листинг:

Java
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package main;
 
import java.nio.file.Paths;
import java.util.Scanner;
import java.io.IOException;
import java.io.File;
import java.io.PrintWriter;
import java.nio.file.Path;
 
class Main {
 
    public static void main(String args[]) {
        String filename = "input.txt";
        Path path = Paths.get(filename);
        try {
            Scanner in = new Scanner(path);
            int x1, x2, x3, x4, y1, y2, y3, y4;
            x1 = in.nextInt();
            y1 = in.nextInt();
            x2 = in.nextInt();
            y2 = in.nextInt();
            x3 = in.nextInt();
            y3 = in.nextInt();
            x4 = 0;
            y4 = 0;
            if ((x2 - x1) * (x3 - x1) + (y2 - y1) * (y3 - y1) == 0) {
                x4 = x3 + x2 - x1;
                y4 = y3 + y2 - y1;
            } else if ((x1 - x2) * (x3 - x2) + (y1 - y2) * (y3 - y2) == 0) {
                x4 = x3 + x1 - x2;
                y4 = y3 + y1 - y2;
            } else if ((x1 - x3) * (x2 - x3) + (y1 - y3) * (y2 - y3) == 0) {
                x4 = x2 + x1 - x3;
                y4 = y2 + y1 - y3;
            }
            PrintWriter out = new PrintWriter(new File("output.txt"));
            out.write("" + x4 + " " + y4);
            out.close();
        } catch (IOException e) {
            System.out.println("Ошибка чтения");
        }
    }
}



-0.50



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

28.08.2017, 05:14

Ответы с готовыми решениями:

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

По трем вершинам прямоугольника найти координаты четвертой
Доброго времени суток! Помогите плз сделать эти задания на с++ в Builder XE 2

4. По известным…

По известным трем вершинам прямоугольника (x1, y1), (x2, y2), (x3, y3) найти координаты четвертой вершины
Помогите составить такую прогу на C#.

Прокомментируйте код, находящий 4-ю вершину прямоугольника по трём заданным
объясните пожалуйста программу,каждую строчку,ничего не понимаю(
Пусть даны координаты трех вершин…

3

Эксперт Java

3638 / 2970 / 918

Регистрация: 05.07.2013

Сообщений: 14,220

28.08.2017, 08:23

2

на бумажке нарисуй три точки, построй из каждой точки вектора к двум другим, для одной из точек угол между векторами будет равен 90, значит это стороны прямоугольника, осталось найти их сумму.



0



164 / 170 / 139

Регистрация: 28.11.2016

Сообщений: 301

28.08.2017, 09:03

3

Лучший ответ Сообщение было отмечено Timon55 как решение

Решение

Условие (x3-x2)*(x2-x1)+(y3-y2)*(y2-y1) = 0 это условие перпендикулярности векторов.
http://www.cleverstudents.ru/v… arity.html
То есть если три точки образуют два вектора с прямым углом, то из крайней точки строится
вектор перпендикулярный тому что входит, так чтобы получился зигзаг.
Смотрите картинку.

Миниатюры

По трём вершинам прямоугольника определить четвёртую
 



1



0 / -1 / 0

Регистрация: 25.07.2017

Сообщений: 10

28.08.2017, 09:15

 [ТС]

4

Xoraxax, спасибо за помощь

Добавлено через 2 минуты
v777779, спасибо вы дали исчерпывающий ответ. Как я мог не узнать скалярное произведение ума не приложу. Всю голову изломал думаю же что-то знакомое.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

28.08.2017, 09:15

Помогаю со студенческими работами здесь

Определить, где находится текущая точка: внутри прямоугольника, снаружи, на границе прямоугольника
Представьте, что у вас на форме есть прямоугольник, границы которого на 10 пикселей отстоят от…

По заданным вершинам определить фигуру
квадрат, прямоугольник, параллелограмм, трапеция или ромб. Необходимо написать консольное…

Определить, какой из треугольников, построенных по заданным вершинам, имеет наибольшую площадь
Сегодня в институте дали задание по дисциплине "Информатика и программирование" но к нашему же…

Определить, сколько чисел кратно трём
Имеется 3 целых числа. Определить, сколько среди них кратных 3

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

Или воспользуйтесь поиском по форуму:

4

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given an N * M grid. It contains exactly three ‘*’ and every other cell is a ‘.’ where ‘*’ denotes a vertex of a rectangle. The task is to find the coordinates of the fourth (missing) vertex (1-based indexing).
    Examples: 
     

    Input: grid[][] = {“*.*”, “*..”, “…”} 
    Output: 2 3 
    (1, 1), (1, 3) and (2, 1) are the given coordinates of the rectangle where (2, 3) is the missing coordinate.
    Input: grid[][] = {“*.*”, “..*”} 
    Output: 2 1 
     

    Approach: Find the coordinates of the 3 vertices by iterating through the given grid. Since a rectangle consists of 2 X-coordinates and 2 Y-coordinates and 4 vertices, every X-coordinate and Y-coordinate should occur exactly twice. We can count how many times each X and Y coordinate occurs in the 3 given vertices and the 4th one will have coordinates that occur only once.
    Below is the implementation of the above approach: 
     

    C++

    #include <bits/stdc++.h>

    using namespace std;

    pair<int, int> findFourthVertex(int n, int m, string s[])

    {

        unordered_map<int, int> row, col;

        for (int i = 0; i < n; i++)

            for (int j = 0; j < m; j++)

                if (s[i][j] == '*') {

                    row[i]++;

                    col[j]++;

                }

        int x, y;

        for (auto tm : row)

            if (tm.second == 1)

                x = tm.first;

        for (auto tm : col)

            if (tm.second == 1)

                y = tm.first;

        return make_pair(x + 1, y + 1);

    }

    int main()

    {

        string s[] = { "*.*", "*..", "..." };

        int n = sizeof(s) / sizeof(s[0]);

        int m = s[0].length();

        auto rs = findFourthVertex(n, m, s);

        cout << rs.first << " " << rs.second;

    }

    Java

    import java.util.HashMap;

    import java.util.Map;

    class GfG

    {

        static Pair<Integer, Integer> findFourthVertex(int n,

                                            int m, String s[])

        {

            HashMap<Integer, Integer> row = new HashMap<>();

            HashMap<Integer, Integer> col = new HashMap<>();

            for (int i = 0; i < n; i++)

            {

                for (int j = 0; j < m; j++)

                {

                    if (s[i].charAt(j) == '*')

                    {

                        if (row.containsKey(i))

                        {

                            row.put(i, row.get(i) + 1);

                        }

                        else

                        {

                            row.put(i, 1);

                        }

                        if (col.containsKey(j))

                        {

                            col.put(j, col.get(j) + 1);

                        }

                        else

                        {

                            col.put(j, 1);

                        }

                    }

                }

            }

            int x = 0, y = 0;

            for (Map.Entry<Integer, Integer> entry : row.entrySet())

            {

                if (entry.getValue() == 1)

                    x = entry.getKey();

            }

            for (Map.Entry<Integer, Integer> entry : col.entrySet())

            {

                if (entry.getValue() == 1)

                    y = entry.getKey();

            }

            Pair<Integer, Integer> ans = new Pair<>(x + 1, y + 1);

            return ans;

        }

        public static void main(String []args)

        {

            String s[] = { "*.*", "*..", "..." };

            int n = s.length;

            int m = s[0].length();

            Pair<Integer, Integer> rs = findFourthVertex(n, m, s);

            System.out.println(rs.first + " " + rs.second);

        }

    }

    class Pair<A, B>

    {

        A first;

        B second;

        public Pair(A first, B second)

        {

            this.first = first;

            this.second = second;

        }

    }

    Python3

    def findFourthVertex(n, m, s) :

        row = dict.fromkeys(range(n), 0)

        col = dict.fromkeys(range(m), 0)

        for i in range(n) :

            for j in range(m) :

                if (s[i][j] == '*') :

                    row[i] += 1;

                    col[j] += 1;

        for keys,values in row.items() :

            if (values == 1) :

                x = keys;

        for keys,values in col.items() :

            if (values == 1) :

                y = keys;

        return (x + 1, y + 1) ;

    if __name__ == "__main__" :

        s = [ "*.*", "*..", "..." ]

        n = len(s);

        m = len(s[0]);

        rs = findFourthVertex(n, m, s);

        print(rs[0], rs[1])

    C#

    using System;

    using System.Collections.Generic;

    class GfG

    {

        static Pair<int, int> findFourthVertex(int n,

                                            int m, String []s)

        {

            Dictionary<int, int> row = new Dictionary<int, int>();

            Dictionary<int, int> col = new Dictionary<int, int>();

            for (int i = 0; i < n; i++)

            {

                for (int j = 0; j < m; j++)

                {

                    if (s[i][j] == '*')

                    {

                        if (row.ContainsKey(i))

                        {

                            row[i] = row[i] + 1;

                        }

                        else

                        {

                            row.Add(i, 1);

                        }

                        if (col.ContainsKey(j))

                        {

                            col[j] = col[j] + 1;

                        }

                        else

                        {

                            col.Add(j, 1);

                        }

                    }

                }

            }

            int x = 0, y = 0;

            foreach(KeyValuePair<int, int> entry in row)

            {

                if (entry.Value == 1)

                    x = entry.Key;

            }

            foreach(KeyValuePair<int, int> entry in col)

            {

                if (entry.Value == 1)

                    y = entry.Key;

            }

            Pair<int, int> ans = new Pair<int, int>(x + 1, y + 1);

            return ans;

        }

        public static void Main(String []args)

        {

            String []s = { "*.*", "*..", "..." };

            int n = s.Length;

            int m = s[0].Length;

            Pair<int, int> rs = findFourthVertex(n, m, s);

            Console.WriteLine(rs.first + " " + rs.second);

        }

    }

    class Pair<A, B>

    {

        public A first;

        public B second;

        public Pair(A first, B second)

        {

            this.first = first;

            this.second = second;

        }

    }

    Javascript

    <script>

    function findFourthVertex(n, m, s)

    {

        var row = new Map(), col = new Map();

        for (var i = 0; i < n; i++)

            for (var j = 0; j < m; j++)

                if (s[i][j] == '*') {

                    if(row.has(i))

                        row.set(i, row.get(i)+1)

                    else

                        row.set(i, 1)

                    if(col.has(j))

                        col.set(j, col.get(j)+1)

                    else

                        col.set(j, 1)

                }

        var x, y;

        row.forEach((value, key) => {

            if (value == 1)

                x = key;

        });

        col.forEach((value, key) => {

            if (value == 1)

                y = key;

        });

        return [x + 1, y + 1];

    }

    var s = ["*.*", "*..", "..." ];

    var n = s.length;

    var m = s[0].length;

    var rs = findFourthVertex(n, m, s);

    document.write( rs[0] + " " + rs[1]);

    </script>

    Time Complexity: O(N*M), as we are using a loop to traverse N*M times.
     Auxiliary Space: O(N + M), as we are using extra space for map.

    Last Updated :
    31 May, 2022

    Like Article

    Save Article

    Vote for difficulty

    Current difficulty :
    Basic


    Главная



    • 0




    Даны три вершины А(1,4,2), В(2.-1,5), С(0,-2,4) прямоугольника АВСД. Найдите координаты четвертой вершины Д




    Антонина Сбитенькова


    Вопрос задан 22 сентября 2019 в


    5 — 9 классы,  

    Геометрия.

    • Комментариев (0)

    Добавить

    Отмена


  • 1
    Ответ (-а, -ов)

    • По голосам
    • По дате



    • 0


    О — середина диагонали АС
    О = 1/2(А+С) = 1/2*((1,4,2)+(0,-2,4)) = 1/2*(1;2;6) = (1/2;1;3)
    И эта же точка — середина диагонали BD
    O = 1/2*(B + D)
    2O = B + D
    D = 2O — B = 2*
    (1/2;1;3) — (2;-1;5) = (1;2;6) — (2;-1;5) = (-1;3;1)

    Отмена




    Надежда Селяненкова


    Отвечено 22 сентября 2019

    • Комментариев (0)

    Добавить

    Отмена

  • Ваш ответ

    Program If23;
    Var
    x1,y1,x2,y2,x3,y3,x4,y4:integer;
    Begin
    ReadLn(x1,y1,x2,y2,x3,y3);
    If x1 = x2 Then x4 := x3;
    If x1 = x3 Then x4 := x2;
    If x2 = x3 Then x4 := x1;
    If y1 = y2 Then y4 := y3;
    If y1 = y3 Then y4 := y2;
    If y2 = y3 Then y4 := y1;
    WriteLn('Координаты четвертой вершины: ',x4,',',y4); 
    End.
    

    Похожие записи/страницы:

    • Даны координаты двух противоположных вершин прямоугольника: (x1, y1), (x2, y2). Стороны прямоугольника параллельны осям…
    • Даны координаты трех вершин треугольника: (x1, y1), (x2, y2), (x3, y3). Найти его периметр и площадь, используя формулу…
    • Даны координаты двух противоположных вершин прямоугольника: (x1, y1), (x2, y2). Стороны прямоугольника параллельны осям…
    • найти площадь выпуклого четырёхугольника по координатам его вершин А(x1,y1) B(x2,y2) C (x3,y3) D(x4,y4) -…
    • Проверить истинность высказывания: «Точка с координатами (x, y) лежит внутри прямоугольника, левая верхняя вершина…
    • Написать программу, определяющую наименьшую площадь из трех заданных координатами своих вершин квадратов. Написать…
    • Заданы координаты трех вершин треугольника (x1,y1), (x2,y2),(x3,y3). Найти его периметр и площадь — Pascal(Паскаль)
    • На плоскости заданы координаты трёх точек — вершины треугольника. Определить, равносторонним, равнобедренным или…

    koo236
    7 лет назад

    Светило науки — 1 ответ — 0 раз оказано помощи

    Сначала находим координаты вектора АВ, получится (0,6 ; -3,5). Следовательно вектор АВ должен быть равен вектору DC, значит и координаты у них будут совпадать (0,6 ; -3,5). Пишем формулу нахождения вектора DC. Координата вершины D (-0,6 ; 1,1), потому что из координат C нужно вычесть координаты D, чтобы получились координаты вектора DC.

    (0 оценок)

    Понравилась статья? Поделить с друзьями:

    Не пропустите также:

  • Как можно найти кредитного донора
  • Как найти родителей которые отказались от тебя
  • Как составить словосочетание со связью согласование
  • This item may not have a label readable by screen readers как исправить
  • Как нашли золото рейха

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии