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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить программу для нахожления точки пересечения этих функций http://www.cyberforum.ru/cpp-beginners/thread29066.html
Кто нить кто понимает с++ помогите с задачкой :) Дана парабола y=ax2+bx+с и прямая y=kx+m. Составить программу для нахожления точки пересечения этих функций, если тковая существует. В случае если...
C++ Строки немогу найти решения или нехватает литературы чтоб самому разобраться подскажите пожалуйста как решить эти задачи методом для начинающего или где можно взять литературу по строкам пожалуйста заранее благодарен 1.Дана строка. Заменить в строке все большые буквы... http://www.cyberforum.ru/cpp-beginners/thread29059.html
Поиск экстремумов функции C++
Вообще завал(( Была задана такая задача: Найти экстремумы функции y=2*sin(3*x) С чего вообще начать решать эту задачу? Есть ли какие-нибудь специальные функции(и если есть какие нужны...
Программа на С++Методо Гаусса C++
Реализован метод Гаусса.Предмет Численные методы. Может кто-то сталкивался.Но запустить не могу.Одно предупереждение об инициализации N.Среда Visual Studio 2008.Просьба помочь.Заранее спасибо. ....
C++ Протабулировать ф-ю на промежутке от а к b с шагом n согласно вложению http://www.cyberforum.ru/cpp-beginners/thread29008.html
Прошу помогите решить написать программу. 1. Протабулировать ф-ю на промежутке от а к b с шагом n согласно вложению. 2. Задано число N. Сложить программу поиска “совершенствованных” чисел меньших...
C++ Протабулировать функцию в промежутке между а и b с шагом n Помогите пожалуйста написать программу Вот задание 1. Протабулювати функцію на проміжку від а до b з кроком n згідно додатку. 2. Задано деяке число N. Скласти програму пошуку “досконалих” чисел... подробнее

Показать сообщение отдельно
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
07.04.2009, 17:28
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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru