Как найти медиану зная векторы

Найти медиану треугольника по координатам вершин

Как найти медиану если даны координаты вершин треугольника?

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

Рассмотрим нахождение медианы на конкретном примере.

najti-medianu-dany-koordinaty-vershin-treugolnikaДано: ΔABC,

A(-11;12), B(3;8), C(-1;6),

AF — медиана.

Найти: AF

Решение:

1) Так как AF — медиана треугольника ABC, то F — середина BC.

По формулам координат середины отрезка:

    [x_F = frac{{x_B + x_C }}{2} = frac{{3 + ( - 1)}}{2} = 1;]

    [y_F = frac{{y_B + y_C }}{2} = frac{{8 + 6}}{2} = 7.]

Итак, F(1;7).

2) По формуле расстояния между точками

    [AF = sqrt {(x_F - x_A )^2 + (y_F - y_A )^2 } ]

    [AF = sqrt {(1 - ( - 11))^2 + (7 - 12)^2 } = ]

    [= sqrt {12^2 + ( - 5)^2 } = sqrt {144 + 25} = sqrt {169} = 13.]

Ответ: 13.

Найти медиану треугольника по координатам вершин

Как найти медиану если даны координаты вершин треугольника?

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

Рассмотрим нахождение медианы на конкретном примере.

Дано: ΔABC,

1) Так как AF — медиана треугольника ABC, то F — середина BC.

Please wait.

We are checking your browser. mathvox.ru

Why do I have to complete a CAPTCHA?

Completing the CAPTCHA proves you are a human and gives you temporary access to the web property.

What can I do to prevent this in the future?

If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware.

If you are at an office or shared network, you can ask the network administrator to run a scan across the network looking for misconfigured or infected devices.

Another way to prevent getting this page in the future is to use Privacy Pass. You may need to download version 2.0 now from the Chrome Web Store.

Cloudflare Ray ID: 6d27ca999cd416bb • Your IP : 85.95.179.65 • Performance & security by Cloudflare

Вычислить медиану значений, хранящихся в Vector-c++?

Я студент-программист, и для проекта, над которым я работаю, из того, что мне нужно сделать, это вычислить медианное значение вектора значений int. Я должен сделать это, используя только функцию сортировки из STL и векторных функций-членов, таких как .begin() , .end() и .size() .

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

и я штука ниже я включил моя попытка. Так где же я ошибаюсь? Я был бы признателен, если бы вы дали мне несколько советов или ресурсов, чтобы двигаться в правильном направлении.

код:

спасибо!!

6 ответов

Вы делаете дополнительное разделение и в целом делаете его немного более сложным, чем это должно быть. Кроме того, нет необходимости создавать делитель, когда 2 на самом деле более значим в контексте.

нет необходимости полностью сортировать вектор: std::nth_element может сделать достаточно работы, чтобы поставить медиану в правильное положение. См. мой ответ на этот вопрос для примера.

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

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

Если вы хотите избежать затрат на выделение копии набора данных и хотите изменить базовый набор данных, вы можете использовать это вместо:

не делай этого. Это просто делает ваш код более запутанным. Вы, вероятно, читали рекомендации о том, чтобы не использовать магические числа, но четность против странности чисел является фундаментальным свойством, поэтому абстрагирование этого не дает никакой пользы, но затрудняет читаемость.

вы берете итератор в конец вектора, беря другой итератор, который указывает на один конец вектора, добавляя итераторы вместе (что не является операцией, которая имеет смысл), и затем делим полученный итератор (что также не имеет смысла). Это более сложный случай; сначала я объясню, что делать с вектором нечетного размера, а четный случай оставлю вам в качестве упражнения.

опять же, вы делите итератор. Вместо этого вы хотите увеличить итератор до начала вектора на hWScores.size() / 2 элементы:

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

я приведу ниже пример программы, которая несколько похожа на ту, что в ответе Макса С. Чтобы помочь ОП продвигать свои знания и понимание, я внес ряд изменений. У меня:

a) изменил вызов по ссылке const на вызов по значению, так как сортировка захочет изменить порядок элементов в вашем векторе (EDIT: я только что видел, что Роб Кеннеди также сказал это, когда я готовил свой пост)

b) заменил size_t на более подходящий вектор >:: size_type (собственно, удобный синоним последнего),

c) сохраненный размер / 2 в промежуточную переменную,

d) выбрасывается исключение, если вектор пуст, и

e) я также ввел условный оператор (? :).

На самом деле, все эти исправления прямо из главы 4 “ускоренного C++” Кенига и Му.

Я не совсем уверен, каковы ваши ограничения на пользователя функций-членов vector, но индексируйте доступ с [] или at() упростит доступ к элементам:

вы также можете работать с итераторами типа begin() + offset как вы сейчас делаете, но затем вам нужно сначала вычислить правильное смещение с size()/2 и добавить, что до begin() , а не наоборот. Также вам нужно разыменовать результирующий итератор, чтобы получить доступ к фактическому значению при этом точка:

[spoiler title=”источники:”]

http://mathvox.ru/geometria/dekartovi-koordinati-uravneniya-figur-v-dekartovoi-sisteme-koordinat/glava-2-metod-koordinat/kak-naiti-medianu-treugolnika-esli-izvestni-koordinati-ego-vershin/

http://askdev.ru/q/vychislit-medianu-znacheniy-hranyaschihsya-v-vector-c-96101/

[/spoiler]

Ответ на первый ответ постой:

Скалярное произведение есть скаляр, равный произведению модулей на косинус угла между ними:

А=|p|*|q|*cos(p, q) = 3 *1* cos (pi/3) = 3*0,5=1,5..

Со вторыми заданиями немного сложнее:

Сначала установим условно вектор q на оси х, тогда получим, что оба вектора начинаются в 0 и имеют между собой заданный угол..

Разложим оба вектора p и q на взаимно ортогональные составляющие:

px=|p|cos (п/3)=3*0,5=1,5

py=|p|sin (п/3)=3*0,86=2,6

qx=|q|=1

qy=0

Далее согласно заданным выражениям AB = 2p – q; AC = 3p + 2q произведём вычисления для каждой спроецированной компоненты..

AB = 2p – q; AC = 3p + 2q

АВх=2*1,5-1=2

АВу=2*2,6=5,2

АСх=3*1,5+2=6,5

АСу=3*1,5=4,5

Итак, мы задали точку А(0;0), получили точки В(2;5,2) С(6,5;4,5)..

Вектор ВС задаётся точкой А и В..

Теперь всё просто: находим длину отрезка ВС по известным координатам:

|BC|=sqrt((6,5-2)^2+(5,2-4,5)^2)= 4,5..

отношение cos a=(5,2-4,5)/4,5 есть угол относительно оси абсцисс, относительно которой мы и отсчитываем угол а=81 град=1,41 рад..

Модуль и угол задают вектор ВС..

Чтобы найти длину медианы нужно найти точку М, которая делит ВС напополам 4,5/2 = 2,25..

Из подобия прямоугольного треугольника, построенного на точек М стороны

(6,5-2)/2+2 = 4,25..

(5,2-4,5)/2+4,5= 4,85..

Это координаты точки М (4,25;4,85)..

Теперь находим АМ=sqrt((4,25)^2+(4,85)^2)=6,45..

Это и есть искомая длина медианы..

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given two vectors, a and b of different sizes, where array a has m number of elements and array b has n number of elements. The task is to find the median of two vectors. This problem is an extension of the Median of two sorted arrays of different sizes problem. 

    Example:

    Input: a = {1, 4}
              b = {2}

    Output: The median is 2.

    Explanation: 
    The merged vector = {1, 2, 4} 
    So, the median is 2.

    Input: a = {1, 2}
               b = {3, 5}

    Output: The median is 2.50000

    Explanation: 
    The merged vector = {1, 2, 3, 5} 
    So, the median is (2 + 3) / 2 = 2.5.

    Approach:

    1. Initialize vector a.
    2. Initialize vector b.
    3. Create a new vector of size a + b.
    4. Iterate using a loop the first vector and store the data into a newly created vector and similarly for the second vector after iterating the first vector.
    5. Merged both sorted vectors in the newly created vector by using the merge() STL function.
    6. Find the median for even and odd sizes and return it.

    Below is the C++ implementation of the above approach:

    C++

    #include <bits/stdc++.h>

    using namespace std;

    double findMedianSortedVectors(vector<int>& a,

                                   vector<int>& b)

    {

        vector<int> c(a.size() + b.size());

        int k = 0;

        double median = 0;

        int size_a = a.size();

        int size_b = b.size();

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

        {

            c[k++] = a[i];

        }

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

        {

            c[k++] = b[i];

        }

        merge(a.begin(), a.end(),

              b.begin(), b.end(), c.begin());

        int n = c.size();

        if (n % 2 == 0) 

        {

            median = c[(n / 2) - 1] + c[n / 2];

            median = median / 2;

        }

        else 

        

            median = c[(n - 1) / 2];

        }

        return median;

    }

    int main()

    {

        vector<int> v1;

        vector<int> v2;

        v1.push_back(1);

        v1.push_back(4);

        v2.push_back(2);

        double median_vectors = 

        findMedianSortedVectors(v1, v2);

        cout << median_vectors << endl;

        return 0;

    }

    Java

    import java.io.*;

    import java.util.Collections;

    import java.util.Vector;

    class GFG {

      public static double

        findMedianSortedVectors(Vector<Integer> a,

                                Vector<Integer> b)

      {

        Vector<Integer> c = new Vector<Integer>();

        double median = 0;

        int size_a = a.size();

        int size_b = b.size();

        for (int i = 0; i < size_a; i++) {

          c.add(a.get(i));

        }

        for (int i = 0; i < size_b; i++) {

          c.add(b.get(i));

        }

        Collections.sort(c);

        int n = c.size();

        if (n % 2 == 0) {

          median = c.get((n / 2) - 1) + c.get(n / 2);

          median = median / 2;

        }

        else {

          median = c.get((n - 1) / 2);

        }

        return median;

      }

      public static void main(String[] args)

      {

        Vector<Integer> v1 = new Vector<Integer>();

        Vector<Integer> v2 = new Vector<Integer>();

        v1.add(1);

        v1.add(4);

        v2.add(2);

        double median_vectors

          = findMedianSortedVectors(v1, v2);

        System.out.println(median_vectors);

      }

    }

    Python3

    def findMedianSortedVectors(a, b):

        c = []

        for i in range(0, len(a)):

            c.append(0)

        for i in range(0, len(b)):

            c.append(0)

        k = 0

        median = 0

        size_a = len(a)

        size_b = len(b)

        for i in range(0, size_a):

            c[k] = a[i]

            k += 1

        for i in range(0, size_b):

            c[k] = b[i]

            k += 1

        c.sort()

        n = len(c)

        if (n % 2 == 0):

            median = c[(n // 2) - 1] + c[n // 2]

            median = median / 2

        else:

            median = c[(n - 1) // 2]

        return median

    v1 = [1, 4]

    v2 = [2]

    median_lists = findMedianSortedVectors(v1, v2)

    print(median_lists)

    C#

    using System;

    using System.Collections;

    using System.Collections.Generic;

    class GFG

    {

      public static double

        findMedianSortedVectors(ArrayList a,

                                ArrayList b)

      {

        ArrayList c = new ArrayList();

        double median = 0;

        int size_a = a.Count;

        int size_b = b.Count;

        for (int i = 0; i < size_a; i++) {

          c.Add(a[i]);

        }

        for (int i = 0; i < size_b; i++) {

          c.Add(b[i]);

        }

        c.Sort();

        int n = c.Count;

        if (n % 2 == 0) {

          median = (int)c[(n / 2) - 1] + (int)c[n / 2];

          median = median / 2;

        }

        else {

          median = (int)c[(n - 1) / 2];

        }

        return median;

      }

      public static void Main()

      {

        ArrayList v1 = new ArrayList();

        ArrayList v2 = new ArrayList();

        v1.Add(1);

        v1.Add(4);

        v2.Add(2);

        double median_vectors

          = findMedianSortedVectors(v1, v2);

        Console.WriteLine(median_vectors);

      }

    }

    Javascript

    <script>

          function findMedianSortedVectors(a, b)

          {

              let c = new Array(a.length + b.length);

              let k = 0;

              let median = 0;

              let size_a = a.length;

              let size_b = b.length;

              for (let i = 0; i < size_a; i++)

              {

                  c[k++] = a[i];

              }

              for (let i = 0; i < size_b; i++) 

              {

                  c[k++] = b[i];

              }

              c.sort(function (a, b) { return a - b })

              let n = c.length;

              if (n % 2 == 0)

              {

                  median = c[(Math.floor(n / 2) - 1)] + c[(Math.floor(n / 2))];

                  median = Math.floor(median / 2);

              }

              else 

              {

                  median = c[(Math.floor((n - 1) / 2))];

              }

              return median;

          }

          let v1 = [];

          let v2 = [];

          v1.push(1);

          v1.push(4);

          v2.push(2);

          let median_vectors =

              findMedianSortedVectors(v1, v2);

          document.write(median_vectors + '<br>');

      </script>

    Complexity:

    Time Complexity: O(m + n) as to merge both the vectors O(m+n) time is needed.
    Space Complexity: O(1) as no extra space is required.

    Last Updated :
    24 Mar, 2023

    Like Article

    Save Article

    информация о

    следующих вебинарах и чатах на сайте ИДО

    2. Даны вершины треугольника

    Составить:

    а) уравнение стороны АВ и найти ее длину,

    b) уравнение медианы BM и найти ее длину,

    с) уравнение высоты СН и найти ее длину,

    d) косинус угла между медианой ВМ и высотой СН.

    78

    а) Для составления уравнения стороны АВ воспользуемся уравнением прямой, проходящей через две точки:

    79

    Длину стороны АВ найдем как расстояние между двумя точками

    80

    b) Вектор медианы треугольника равен полусумме векторов его сторон, т.е.

    Длина медианы есть модуль вектора

    81

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