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

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

Войти
Регистрация
Восстановить пароль
 
relax-z
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 32
#1

определить положение точки как это сделать? - C++

11.10.2010, 19:47. Просмотров 1039. Ответов 8
Метки нет (Все метки)

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

Вот задание:определить положение точки M(x,y) относительно заштрихованной фигуры
0
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2010, 19:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос определить положение точки как это сделать? (C++):

нужно создать таблицу из 3 строк и 4 столбцов и заполнить её (любой информацией,это неважно) . Как это можно сделать ? - C++
Здравствуйте.У меня возникла проблема. Помогите пожалуйста!Модуль в понедельник , про таблицы ничего не рассказывали , а преподаватель...

Положение точки относительно заданного эллипса - C++
Задан центр элипса и Rx Ry соответственно и точка К (x0 , y0); Задача : узнать как лежит точка К относительно заданного элипса. В...

Программа, определяющая положение точки в декартовой и полярной системе координат - C++
помогите с кодом кто может,заранее благодарю. Задание: Разработайте структуры, определяющие положение точки в декартовой и полярной...

Создать записи, определяющие положение точки в декартовой и в полярной системах координат. - C++
никак решить немогу. можно решить даже и на билдере или шарпе? только помогите Создать записи, определяющие положение точки в...

Как это сделать? - C++
Нужно заменить цифры в числе на ноль, если цифра равна "a". А затем вывести получившееся число. число N - натуральное, а - является...

как это сделать - C++
вы мне можете помочь, никак не могу понять как это вбить в СИ??? "x-x^/3!+x^/5!+.. . + x^^"'^^V(2n + l)! Функция sh(x) " как это...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
11.10.2010, 21:26 #2
Какие входные данные ?

Добавлено через 23 секунды
Кстати, заштрихованных фигур вроде как две ?

Добавлено через 1 минуту
И да, положение может быть указано относительно другой точки (т.е. парой координат в двухмерном пространстве), о понятии положения относительно геометрической фигуры я не слышал.
0
relax-z
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 32
13.10.2010, 08:08  [ТС] #3
входные данные вводить с клавиатуры, что бы можно было проверить любые точки.
да заштрихованных фигур две.
С++ недавно проходить начал и такое задание дают...
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.10.2010, 09:05 #4
relax-z,
К Си++ "такое задание" не относится, оно относится к школьному курсу математики/геометрии. А верх сложности при реализации - использование if-else'ов. Так что ничего сверхъестественного в задании нет.
По исходным данным: Что мы должны вводить? Радиус окружности и координаты вершин треугольника даны? Или всё надо вводить с клавиатуры?
0
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
13.10.2010, 17:19 #5
silent_1991, окружность, как вы заметили, вписанная в треугольник. Радиус вычисляется.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.10.2010, 17:31 #6
Andrew_Lvov,
Это я понимаю (однако ещё следует точно выяснить - окружность ли это ). Тем не менее вопрос остаётся - даны ли координаты вершин треугольника. Хотя это по сути и не важно, реализация одна... Лень только в очередной раз это писать...
0
relax-z
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 32
13.10.2010, 20:30  [ТС] #7
координаты вершин треугольника не даны, с клавиатуры всё вводить нужно.
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.10.2010, 09:56 #8
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/////////////////////////////////////////////////////////////////////////////////////
//  Вот задание:определить положение точки M(x,y) относительно заштрихованной фигуры
//
//                        *
//                      *   *
//                    *  ***  *  K
//                  **         ** 
//                **         *   **
//              * *        *      ***
//            *   *       *       *****
//          *     *       *****   *******
//        *        *      ********   ******
//      *            *    ******          ***
//    *****************************************
//
/////////////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <functional>
#include <iomanip>
#include <iostream>
#include <limits>
/////////////////////////////////////////////////////////////////////////////////////
typedef  double  T_real;
/////////////////////////////////////////////////////////////////////////////////////
template<class T>
bool  equal_to_for_real(T a, T b) 
{
    const T  coef = 10;
    return abs(a - b) < std::numeric_limits<T>::epsilon() * coef;
}
/////////////////////////////////////////////////////////////////////////////////////
template<class T>
bool  greater_for_real(T a, T b) 
{
    return a > b
           && !equal_to_for_real(a, b);
}
/////////////////////////////////////////////////////////////////////////////////////
template<class T>
bool  less_for_real(T a, T b) 
{
    return a < b
           && !equal_to_for_real(a, b);
}
/////////////////////////////////////////////////////////////////////////////////////
template<class T>
bool  greater_equal_for_real(T a, T b) 
{
    return !less_for_real(a, b);
}
/////////////////////////////////////////////////////////////////////////////////////
template<class T>
bool  less_equal_for_real(T a, T b) 
{
    return !greater_for_real(a, b);
}
/////////////////////////////////////////////////////////////////////////////////////
bool  point_belongs_to_area
    (
        T_real  mx, 
        T_real  my, 
        T_real  x0, 
        T_real  y0
    )
{
    //Заданные области лежат в первом квадранте, поэтому:    
    if(less_for_real(mx, 0.0) || less_for_real(my, 0.0))
    {
        return false;
    }
 
    //Находим радиус вписанной окружности треугольника:
    T_real  S = x0 * y0;                     //Площадь треугольника.
    T_real  hip = sqrt(x0 * x0 + y0 * y0);   //Длина правой стороны треугольника.
    T_real  p = x0 + hip;                    //Полупериметр треугольника.
    T_real  r = S / p;                       //Радиус вписанной окружности треугольника.
        
    if(
          less_equal_for_real
              (
                  mx * mx + (my - r) * (my - r), 
                  r * r
              )
      )
    {
        //Точка M лежит внутри окружности радиуса r, следовательно
        //она должна лежать не выше прямой, заданной отрезками x0 и r.
        //Эта прямая имеет уравнение в отрезках x / x0 + y / r = 1, 
        //т.е. y = r * (1 - x / x0),
        //откуда условие того, что точка M лежит не выше этой прямой, имеет вид:
        //my <= r * (1 - mx / x0)        
        return  less_equal_for_real(my,  r * (1 - mx / x0)); 
    }
    else
    {
        //Точка M лежит вне окружности, следовательно должны выполняться три условия:
        //1)Точка M должна лежать не ниже прямой, заданной отрезками x0 и r, т.е.
        //my >= r * (1 - mx / x0).
        //
        //2)Точка M должна лежать не выше прямой, заданной отрезками x0 и y0,
        //уравнение которой имеет вид x / x0 + y / y0 = 1, следовательно
        //my <= y0 * (1 - mx / x0).
        //
        //3)Точка M должна лежать не выше точки K, в которой вписанная окружность
        //касается правой стороны треугольника. Очевидно, что Ky = r + r * cos(a), 
        //где из подобия треугольников cos(a) = x0 / hip, т.е.
        //Ky = r * (1 + cos(a)) = r * (1 + x0 / hip), откуда
        //my <= r * (1 + x0 / hip).
        //Объединяя эти три условия, получим:
        return  greater_equal_for_real( my, r* (1 - mx/x0) )
                && less_equal_for_real( my, y0*(1 - mx/x0) )
                && less_equal_for_real( my, r*(1 + x0/hip) );      
    }
}
/////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    //Пусть мы имеем равнобедренный треугольник, лежащий основанием на оси X,
    //а его верхняя вершина лежит на оси Y.
    //Тогда мы можем задать этот треугольник координатой x0 правой нижней вершины
    //и координатой y0 верхней вершины.
    //Тогда радиус r вписанной окружности будет равен:
    //  r = S / p, где S - площадь треугольника, а p - его полупериметр, т.е.
    //  S = x0 * y0,
    //  p = x0 + sqrt(x0^2 + y0^2).
    std::cout << "Введите длины отрезков, которые отсекает на осях координат"
              << std::endl
              << "правая сторона равнобедренного треугольника:"
              << std::endl;
 
    T_real  x0 = 0;
    do
    {
        std::cout << "x0 = ";
        std::cin >> x0;    
    }while(less_equal_for_real(x0, 0.0));
       
    T_real  y0 = 0;
    do
    {
        std::cout << "y0 = ";
        std::cin >> y0;    
    }while(less_equal_for_real(y0, 0.0));  
    
    for(;;)
    {
        std::cout << std::endl
                  << std::endl
                  << std::endl
                  << std::endl
                  << std::endl
                  << "Введите координаты точки M:"
                  << std::endl
                  << "\tMx = ";
        T_real  mx = 0;
        std::cin >> mx;
        std::cout << "\tMy = ";
        T_real  my = 0;
        std::cin >> my;
 
        std::cout << "Точка"
                  << (point_belongs_to_area(mx, my, x0, y0) ? "" : " НЕ")
                  << " принадлежит заданной области.";
    }
}
0
relax-z
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 32
24.10.2010, 12:16  [ТС] #9
спасибо, но как новичку в этой программе много не понятного
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2010, 12:16
Привет! Вот еще темы с ответами:

Как это сделать? - C++
Предположим, есть некоторый класс, например, TTrigonometricComplex и я хочу сделать нём функции, которые будут доступны в левой части...

как это сделать - C++
помогите, погибаю!!! тема: заставка(screan sever)? сменяющая картинки из списка особенности: поддержка эффектов смены, формирование...

Как это сделать - C++
У меня такой код #include &lt;iostream&gt; using namespace std; #include &lt;conio.h&gt; int main(){ char input = 'a'; double...

Как это сделать? - C++
Класс, у него несколько гарантированных экземпляров, из них ровно один создан конструктором по умолчанию, средствами языка запрещено...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.10.2010, 12:16
Ответ Создать тему
Опции темы

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