Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
ShadoW
7 / 7 / 0
Регистрация: 01.04.2009
Сообщений: 109
#1

Определить расстояние от данной точки до ломаной - C++

07.04.2009, 16:51. Просмотров 1543. Ответов 3
Метки нет (Все метки)

Есть задача. Вот ее краткий пересказ.

На плосткости дана точка с координатами x и у. Дано n. На плоскости дано n точек, попарно соединенных прямыми, чтобы получилась замкнутая ломанная (первая со второй, вторая с третьей ... n-я с первой). Определить расстояние от данной точки до ломанной.

Есть решение, но понять, что в нем не так, не получается уже третий день.

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
 
float sqrt(float);
int main()
{
    float p,a,b,c,x,y, min=4000000;
    float d[10001][2];
    int n, i;
    cin>>x>>y;
    cin>>n;
    for (i=0;i<n;i++)
        cin>>d[i][0]>>d[i][1];
    d[n][0]=d[0][0];
    d[n][1]=d[0][1];
 
    for (i=0;i<n;i++)
    {//находим стороны рассматриваемого треугольника
        a=sqrt((x-d[i][0])*(x-d[i][0]) + (y-d[i][1])*(y-d[i][1]));
        b=sqrt((x-d[i+1][0])*(x-d[i+1][0]) + (y-d[i+1][1])*(y-d[i+1][1]));
        c=sqrt( (d[i][0]-d[i+1][0])*(d[i][0]-d[i+1][0]) + (d[i][1]-d[i+1][1])*(d[i][1]-d[i+1][1]));
 
        if(a==0 || b==0)
        {
            cout<<"0";
            return 0;
        }
        else
        if(b*b>a*a+c*c)
        {
            if(a<min)
                min=a;
        }
        else
            if(a*a>b*b+c*c)
            {
                if(b<min)
                    min=b;
            }
            else
            {
                p=(a+b+c)/2;
                if(2*sqrt(p*(p-a)*(p-b)*(p-c))/c<min)
                    min=2*sqrt(p*(p-a)*(p-b)*(p-c));
            }
    }
    cout<<min;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2009, 16:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить расстояние от данной точки до ломаной (C++):

Найти расстояние от данной точки до ближайшей стороны треугольника - C++
Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны...

Найти расстояние от данной точки внутри до ближайшей стороны треугольника - C++
Добрый день!) нужна помощь в решении одной задачи:)Заранее спасибо:) Даны координаты вершин треугольника и координаты некоторой точки...

расстояние от окружности к ломаной? - C++
написать функцию: даны координаты 20 точек ломаной, найти три круга, которые находятся дальше от нее и три ближайших окружности. есть...

Определить расстояние до горизонта от точки с заданной высотой - C++
Помогите решить задачу.Считая, что Земля – это идеальная сфера с радиусом R = 6350 км, определить расстояние до горизонта от точки с...

Даны четыре точки на плоскости, определить какое расстояние меньше - C++
Нужно написать программу:Даны четыре точки на плоскости A, B, C, D. Определить, какое расстояние меньше, AB+BC или AC+CD.C++ Спасибо...

Дано три точки . Определить расстояние от них до начала координат. Координаты ввести с клавиатуры - C++
Задача такая Дано три точки . Определить расстояние от них до начала координат. Координаты ввести с клавиатуры Вот мой код , но...

3
ISergey
Maniac
Эксперт С++
1395 / 906 / 56
Регистрация: 02.01.2009
Сообщений: 2,706
Записей в блоге: 1
07.04.2009, 17:07 #2
C++
1
float sqrt(float)
для чего(зачем) у вас эта строка?
и что именно не выходит?.
0
Ksarus
1 / 1 / 0
Регистрация: 01.04.2009
Сообщений: 4
07.04.2009, 17:21 #3
Особо не вникал, но странным кажется вот это:
C++
1
2
if(2*sqrt(p*(p-a)*(p-b)*(p-c))/c<min)
    min=2*sqrt(p*(p-a)*(p-b)*(p-c));
В условии формула делится на с, в следующей строке - нет
0
Humanitis
174 / 166 / 6
Регистрация: 12.01.2009
Сообщений: 430
07.04.2009, 17:28 #4
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
 
float sqrt(float);
int main()
{
    float p,a,b,c,x,y, min=4000000;
    float d[10001][2];
    int n, i;
    cin>>x>>y;
    cin>>n;
    for (i=0;i<n;i++)
        cin>>d[i][0]>>d[i][1];
    d[n][0]=d[0][0];
    d[n][1]=d[0][1];
 
    for (i=0;i<n;i++)
    {//находим стороны рассматриваемого треугольника
        a=sqrt((x-d[i][0])*(x-d[i][0]) + (y-d[i][1])*(y-d[i][1]));
        b=sqrt((x-d[i+1][0])*(x-d[i+1][0]) + (y-d[i+1][1])*(y-d[i+1][1]));
        c=sqrt( (d[i][0]-d[i+1][0])*(d[i][0]-d[i+1][0]) + (d[i][1]-d[i+1][1])*(d[i][1]-d[i+1][1]));
 
        if(a==0 || b==0)//если выполняется условие,значит точка совпадает с одной из вершин ломаной,а следовательно расстояние равно 0
        {
            cout<<"0";
            return 0;
        }
        else
        if(b*b>a*a+c*c)//если нельзя опустить высоту на сторону с,значит 
//расстояние минимальное равно стороне a
        {
            if(a<min)
                min=a;
        }
        else
            if(a*a>b*b+c*c)//аналогично
            {
                if(b<min)
                    min=b;
            }
            else
            {
                p=(a+b+c)/2;//полупериметр
                if(2*sqrt(p*(p-a)*(p-b)*(p-c))/c<min)//находим высоту 
//опущенную из нашей точки на сторону ломаной,это и есть минимальное расстояние
                    min=2*sqrt(p*(p-a)*(p-b)*(p-c))/c;//действительно надо делить на сторону c
            }
    }
    cout<<min;
    return 0;
}
1
07.04.2009, 17:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2009, 17:28
Привет! Вот еще темы с ответами:

Вывести расстояние от заданной точки до точки пересечения диагоналей прямоугольников - C++
Прямоугольники заданы координатами их вершин. 1)Вывести расстояние от заданной точки до точки пересечения диагоналей. 2) Вывести...

Определить кратчайшее расстояние от заданной точки до границы заданной фигуры - C++
Определить кратчайшее расстояние от заданной точки до границы заданной фигуры, если точка находится внутри фигуры, иначе вывести...

Определить кратчайшее расстояние от заданной точки до границы заданной фигуры, считая, что точка находится вне - C++
Определить кратчайшее расстояние от заданной точки до границы заданной фигуры, считая, что точка находится вне

Массив: Соединить точки замкнутой самонепересекающейся ломаной так, чтобы периметр полученного многоугольника был минимальным - C++
Здравствуйте!! Такая проблема, не могу придумать алгоритм для решения следующей задачи, прощу подскажите, у кого есть какие идеи: В...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.