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

Стрельба в мишень - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
eXPonent
 Аватар для eXPonent
43 / 43 / 2
Регистрация: 21.05.2012
Сообщений: 727
26.10.2013, 08:21     Стрельба в мишень #1
Для десяти выстрелов, координаты которых задаются с клавиатуры, вывести текстовые
сообщения о попадании в мишень. Мишень задана на рисунке. Выстрел считается успешным,
если он попадает в закрашенную область.

Каким образом можно написать уравнение для попадания в мишень?
Изображения
 
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
FarStar
Заблокирован
26.10.2013, 08:29     Стрельба в мишень #2
а с уравнением площади окружности ты не знаком? Если так - учи мат часть - тут всё элементарно. Хочешь помощи - приведи код своих наработок, за тебя программу писать никто не будет
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.10.2013, 08:30     Стрельба в мишень #3
Осуществить проверку попадания точки вектора в круги, а также ее положение относительно осей абцисс и ординат.
Если точка не попадает в круги и находится в области -Rx, Ry или Rx, -Ry, то засчитать попадание, иначе промах.
eXPonent
 Аватар для eXPonent
43 / 43 / 2
Регистрация: 21.05.2012
Сообщений: 727
26.10.2013, 09:01  [ТС]     Стрельба в мишень #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
#include <iostream>
using namespace std;
 
void main()
{
    setlocale(LC_ALL,"");
 
    bool hit;
    double R, x, y;
 
    cout << "R = "; cin >> R;
 
    for(int i = 1; i <= 10; i++)
    {
        cout << "x" << i << " = "; cin >> x;
        cout << "y" << i << " = "; cin >> y;
        hit = false;
    
        if (x == 0.0 && y == 0.0) 
            hit = true;
 
        if (-R<=x && x<0 && 0<y && y<=R)
            if ( (x-R)*(x-R) + (y+R)*(y+R) >= R*R)
                hit = true;
    
        if (0<x && x<=R && -R<=y && y<0)
            if ( (x+R)*(x+R) + (y-R)*(y-R) >= R*R)
                hit = true;
 
        if (hit) cout << "В яблочко!" << endl;
        else cout << "Мимо!" << endl;
    }
 
    system("pause");
}
eXPonent
 Аватар для eXPonent
43 / 43 / 2
Регистрация: 21.05.2012
Сообщений: 727
01.11.2013, 08:51  [ТС]     Стрельба в мишень #5
Алгоритм выше неверен, вот более точный алгоритм:
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
#include <iostream>
using namespace std;
 
void main()
{
    setlocale(LC_ALL,"");
 
    bool hit;
    double R, x, y;
 
    cout << "R = "; cin >> R;
 
    for(int i = 1; i <= 10; i++)
    {
        cout << "x" << i << " = "; cin >> x;
        cout << "y" << i << " = "; cin >> y;
        hit = false;
 
        if (-R<=x && x<=0 && 0<=y && y<=R)
            if ( (x-R)*(x-R) + (y+R)*(y+R) >= R*R)
                hit = true;
    
        if (0<=x && x<=R && -R<=y && y<=0)
            if ( (x+R)*(x+R) + (y-R)*(y-R) >= R*R)
                hit = true;
 
        if (hit) cout << "В яблочко!" << endl;
        else cout << "Мимо!" << endl;
    }
 
    system("pause");
}
Yandex
Объявления
01.11.2013, 08:51     Стрельба в мишень
Ответ Создать тему
Опции темы

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