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

Попадание точки в области - C++

Восстановить пароль Регистрация
 
Developer
0 / 0 / 0
Регистрация: 19.09.2011
Сообщений: 37
19.09.2011, 22:30     Попадание точки в области #1
Приветствую, уважаемые форумчани. Помогите с задачкой .
Для действительных х и у, определяющих координату точки A(x,y) в декартовых координатах, определить значение SPO.
Мои наработки, но , наверное, само математическое решение не идеальное, так как всегда получается красная зона.
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
#include "stdafx.h"
#include <iostream>
#include <exception>
#include "math.h"
/*1-red
2-blue
3-yellow
4-othe white */
//
int _tmain(int argc, _TCHAR* argv[])
{
    double R,cR;// R1<R2. Y.
    double X,X1,Y2,Y; //dotX, dotY
    double spo;
    int    white,blue,red,yel,other,color;
    
    std::cout<<"Enter R  and point X point Y values (ex.: '5 4 -4')"<<"\n";
    std::cin>>R>>X>>Y;
    cR = sqrt((pow(-R-Y,2)+pow (R-X,2))) ;
    if (cR > R) 
    {
        color = 3;
    }
    
    if   (sqrt(pow(X-R,2)+pow(Y+R,2))<=R)     //Kvadrat
    color = 4;
    if    ((Y>= X-R) && ((pow(X-R,2)+pow(Y+R,2)) <=(R*R)))// blue up
    {
        color = 2;
    }
    if    ((Y<=(X-2*R)) && ((pow(X-R,2)+pow(Y+R,2)) <=(R*R))) // blue down
    {
        color = 2;
    }
    if    ((( Y>=(-X + R)) && ( (pow (X-R,2) + pow(Y+R,2) ))) <=R*R);// red up
    {
        color = 1;
    }
    if    ((((-X-R)>=Y) && (pow (X-R,2)+ (pow (Y+R,2)))<=R*R))  //red down 
    {
        color = 1;
    }
std::cout<< color;
    
    switch(color)
    {
    
    case 1: std::cout<<"Point`s zone is red"<<"\n"; spo = (X+10)/(X+Y); break;
    case 2: std::cout<<"Point`s zone is blue"<<"\n"; spo = (X+1)/Y; break;
    case 3: std::cout<<"Point`s is yellow "<<"\n"; spo = X/(Y-X); break;
    default: std::cout<<"Point`s zone is other"<<"\n"; spo = X*Y;break; 
    }
    
    return 0;
}
Миниатюры
Попадание точки в области  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2011, 22:30     Попадание точки в области
Посмотрите здесь:

Попадание точки в треугольник C++
Попадание точки в заштрихованную область C++
C++ Попадание точки в обалсть
C++ Попадание точки
C++ Попадание точки в плоскость
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dikanev
21 / 21 / 1
Регистрация: 28.05.2010
Сообщений: 67
19.09.2011, 22:53     Попадание точки в области #2
Математика правильная. Проверь скобки:
if ((( Y>=(-X + R)) && ( (pow (X-R,2) + pow(Y+R,2) ))) <=R*R);// red up
Ты сравниваешь логическое выражение (0 или 1) с R*R.
Developer
0 / 0 / 0
Регистрация: 19.09.2011
Сообщений: 37
19.09.2011, 22:59  [ТС]     Попадание точки в области #3
Типа лишние стоят? Пробовал убирать результат тот же.
dikanev
21 / 21 / 1
Регистрация: 28.05.2010
Сообщений: 67
19.09.2011, 23:09     Попадание точки в области #4
Смотри внимательно, у тебя оператор && действует на ( Y>=(-X + R)) и ( (pow (X-R,2) + pow(Y+R,2) )). А результат сравнивается с R*R.
Developer
0 / 0 / 0
Регистрация: 19.09.2011
Сообщений: 37
19.09.2011, 23:46  [ТС]     Попадание точки в области #5
ну так и должно быть... или нет ?
dikanev
21 / 21 / 1
Регистрация: 28.05.2010
Сообщений: 67
20.09.2011, 00:03     Попадание точки в области #6
Тут даже по типам несоответствие. Логическое значение (результат применения логического И) сравнивается с вещественным R*R. В каком-нибудь Паскале компилятор сразу бы заругался, но тут Си с его неявным приведением типов.
Developer
0 / 0 / 0
Регистрация: 19.09.2011
Сообщений: 37
20.09.2011, 10:48  [ТС]     Попадание точки в области #7
Немного переделал, но все равно не всегда правильно определяет зону
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
#include <iostream>
#include <exception>
#include "math.h"
/*1-red
2-blue
3-yellow
4-othe white */
//
int main(int argc, _TCHAR* argv[])
{
using namespace std;
    double R,S,S1;            // R1<R2. Y.
    double X,Y,spo;       //dotX, dotY
    int    wh,bl,r,ye,col;
 
    cout<<"Enter R  and point X point Y values (ex.: '5 4 -4')"<<endl;
    cin>>R>>X>>Y;
        if((X<0 )|| (Y>0))
        col = 4;
       else
        {
        S=pow((X-R),2)+pow((X+R),2);
 
        if (S > pow(R,2))
    {
         if (((X>=0 && X<R)&& Y<(-R))||(X>R))
             col = 4;
         else
         col = 1;
    }
        else
        if (X>0&&X<R)
        {
        if (Y>=(X-R))
            col = 2;
         else
          if (Y<=(-X-R))
             col = 3;
         }
       else
        if (X>R && X<2*R)
        {
        if (Y>=(X-3*R))
            col = 2;
         else
          if (Y<=(R-X))
             col = 3;
         }
        else
             col = 1;
 
 }
 
cout<< col;
 
    switch(col)
    {
 
    case 1: spo = (X+10)/(X+Y); break;
    case 2: spo = (X+1)/Y; break;
    case 3: spo = X/(Y-X); break;
    case 4: spo = X*Y;break;
    }
cout<< spo;
    return 0;
 }
Что здесь может быть не так ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2011, 10:58     Попадание точки в области
Еще ссылки по теме:

C++ Попадание точки в фигуру на плоскости
Попадание точки в ромб C++

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

Или воспользуйтесь поиском по форуму:
dikanev
21 / 21 / 1
Регистрация: 28.05.2010
Сообщений: 67
20.09.2011, 10:58     Попадание точки в области #8
Оператор && имеет больший приоритет, чем операторы сравнения. Так что расставляй скобки.
Приоритет операций в си
Yandex
Объявления
20.09.2011, 10:58     Попадание точки в области
Ответ Создать тему
Опции темы

Текущее время: 15:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru