Как найти четвертую вершин прямоугольника



Ученик

(94),
закрыт



8 лет назад

Globe

Просветленный

(24815)


8 лет назад

Получаете координаты трех вершин: (x1, y1) (x2, y2) (x3, y3)
Выясняете, какой угол – прямой:

(x2-x1)*(x3-x1)+(y2-y1)*(y3-y1) = 0, значит, прямой угол – при вершине (x1, y1)
тогда координаты четвертой вершины равны:
x = x1 + (x2-x1) + (x3-x1)
y = y1 + (y2-y1) + (y3-y1)

(x1-x2)*(x3-x2)+(y1-y2)*(y3-y2) = 0, значит, прямой угол – при вершине (x2, y2)
тогда координаты четвертой вершины равны:
x = x2 + (x1-x2) + (x3-x2)
y = y2 + (y1-y2) + (y3-y2)

(x1-x3)*(x2-x3)+(y1-y3)*(y2-y3) = 0, значит, прямой угол – при вершине (x3, y3)
тогда координаты четвертой вершины равны:
x = x3 + (x1-x3) + (x2-x3)
y = y3 + (y1-y3) + (y2-y3)

????
PROFIT!

Великий ЗомбиниУченик (94)

8 лет назад

“Выясняете, какой угол – прямой: “
Вот честно даже читать дальше не стала.. . я же написала ПРЯМОУГОЛьник

Великий ЗомбиниУченик (94)

8 лет назад

вот знаешь.. . это все хоть и работает, а я всеравно не знаю откуда ты все это взял. но я разберусь. спасибо)

Максим (Некромант)

Просветленный

(28848)


8 лет назад

это же элементарно

просишь в вести координаты вершины (их всего три)

это значит по два числа на вершину (Х и У) – создаешь при этом масив двух мерный

и загоняешь туда последовательно 3 отданых числа х и у

далее создаем некую логику

нас интересует всего лишь введенные первые координаты и третие

проверяем что бы х1 не равнялся x3 (тоесть проверяем что бы х первого числа не ровнялся х терьего числа ) – если не ровняется тогда х ровняется первому введеному чеслу х – а у третьему введенному числу Y – далее если все же Х третьего числа равняется Х первого числа тогда Х ровняется второго введенного числа Х а У третьего !

вот и вся логика

Великий ЗомбиниУченик (94)

8 лет назад

Что-то не сходится.

Если нам вводят координаты

1; 1
1; 3
3; 3

то, следуя вашей логике, мы получаем координаты 1; 3. Правильно я считаю? Но неизвестная вершина находится в координатах 3; 1

Сергей Марков

Мудрец

(10064)


8 лет назад

Добрый день.
Немного теории.

Исходя из свойств прямоугольника в общем виде координаты вершин (обозначим их А, B, C, D) можно представить в таком виде:

A(x, y); B(x+a,y)

C(x. y+b); D(x+a, y+b)

Можно видеть, что множество значений x имеет значения {x, x+a, x, x+a}, и множество значений y имеет значения {y, y, y+b, y+b}

Теперь представим, что мы получаем в произвольном порядке значения координат трех вершин, и если они принадлежат прямоугольнику, то они будут принадлежать указанным выше множествам и подчиняться их свойствам. Другими словами, из трех значений x – два значения обязательно будут равны, то же самое со значениями y.

Теперь дело техники.

Немного практики.

На Паскале это можно реализовать, например так:

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

Успехов.

Великий ЗомбиниУченик (94)

8 лет назад

“из трех значений x – два значения обязательно будут равны, то же самое со значениями y.”
Вот здесь вы наверно ошибаетесь. Если прямоугольник будет наклонен? Что-то типа этого)

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

    Даны координаты трех вершин прямоугольника ABCD в координатной плоскости:

    A(2; –1), B(5; –1), C(5; –5). Определи координаты вершины D.

    Для поиска прямоугольной оболочки, среди A, B и C можно сначала найти вершину, соседнюю/смежную в прямоугольнике двум другим (т.е. соединённую ребром с двумя другими). Возможны три варианта:

    • Если A смежна с B и C, то должно выполняться <B-A|C-A> = 0, где <x|y> — скалярное произведение векторов x и y (используется перпендикулярность сторон прямоугольника, сходящихся в одной вершине). Вычисляем: B-A=(5-2; -1+1)=(3; 0), C-A=(5-2; -5+1)=(3; -4), <(3; 0) | (3; -4) > = 3*3-0*4 = 9 > 0.
    • Если C смежна A и B, то <A-C|B-C> = < (2-5; -1+5) | (5-5; -1+5) > = -3*0+4*4 = 16 > 0.
    • Если B смежна A и C, то <A-B|C-B> = < (2-5; -1+1) | (5-5; -5+1) > = -3*0-0*4 = 0.

    Выбрав вершину B, можно найти противоположную ей вершину D по “правилу параллелограмма”, просто сложив вектора A-B и C-B. В итоге, D = (A-B)+(C-B) = (-3; 0) + (0; -4) = (-3; -4).

    автор вопроса выбрал этот ответ лучшим

    msb
    [176K]

    более года назад 

    Непонятно, в чем задача, да еще для 11 класса? На клетчатой бумаге наносим оси координат, строим три точки по координатам, соединяем их линиями и уже видно, где находится четвертая вершина. При некотором навыке, после решения десятка упражнений, это уже в уме решается.

    Ответ:D(2;-5)

    Знаете ответ?

    bsitenldefom104

    bsitenldefom104

    Вопрос по математике:

    Точки А(-3,1)В(1,1)С(1,-1) Вершины прямоугольника АВСД Найдите координаты четвертой вершины прямоугольника и вычислите его периметр и площадь,если единичный отрезок 0,5 см ПОМОГИТЕ ПОЖАЛУЙСТА!!!❤️

    Трудности с пониманием предмета? Готовишься к экзаменам, ОГЭ или ЕГЭ?

    Воспользуйся формой подбора репетитора и занимайся онлайн. Пробный урок – бесплатно!

    Ответы и объяснения 1

    averampey

    averampey

    Д(-3,-1)
    (2+1)•2=6см периметр
    2•1=2см/кв площадь

    Знаете ответ? Поделитесь им!

    Гость

    Гость ?

    Как написать хороший ответ?

    Как написать хороший ответ?

    Чтобы добавить хороший ответ необходимо:

    • Отвечать достоверно на те вопросы, на которые знаете
      правильный ответ;
    • Писать подробно, чтобы ответ был исчерпывающий и не
      побуждал на дополнительные вопросы к нему;
    • Писать без грамматических, орфографических и
      пунктуационных ошибок.

    Этого делать не стоит:

    • Копировать ответы со сторонних ресурсов. Хорошо ценятся
      уникальные и личные объяснения;
    • Отвечать не по сути: «Подумай сам(а)», «Легкотня», «Не
      знаю» и так далее;
    • Использовать мат – это неуважительно по отношению к
      пользователям;
    • Писать в ВЕРХНЕМ РЕГИСТРЕ.

    Есть сомнения?

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

    Трудности с домашними заданиями? Не стесняйтесь попросить о помощи –
    смело задавайте вопросы!

    Математика — наука о структурах, порядке и отношениях, исторически сложившаяся на основе операций подсчёта, измерения и описания формы объектов.

    Добавить комментарий