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

Точка с координатами - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
19.09.2010, 16:19     Точка с координатами #1
Ребята такое дело,я только начала изучать C++,а препод уже назадавал очень много и я не знаю как это делать.Примеры однотипные.Я вам напишу один,а остальные уже буду решать по аналогии.Помогите пожалуйста!
Задача толклм не поставлена.Надо составить программу,которая проверяла принадлежит данная точка заданной области или нет?Область на графике находиться в 1 и 3 четверти,между окружностью большего радиуса=2 и меньшего=1.5.
Понятия не имеею как это сделать!!!Кроме того,что раз 1 и 3 четверть,то x*y>0.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.09.2010, 16:38     Точка с координатами #2
barlog,
Я так понимаю, окружностьи имеют центр в начале координат? Если так, то вам просто надо посчитать расстояние d от начала координат до заданной точки (d = sqrt(x^2 + y^2 + z^2)) И проверить, попадает ли оно в промежуток [1.5; 2] (т.е. между радиусами окружностей).

Добавлено через 1 минуту
Упс, у нас же двухмерщина)))
Код
d = sqrt(x^2 + y^2)
Добавлено через 14 минут
Что-то вроде этого
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    double x, y;
    
    cout << "Input x: ";
    cin >> x;
    cout << "Input y: ";
    cin >> y;
    
    if (x * y < 0.0)
        cout << "No" << endl;
    else
    {
        double d = sqrt(x * x + y * y);
        
        if (d < 1.5 && d > 2.0)
            cout << "No" << endl;
        else
            cout << "Yes" << endl;
    }
 
    system("pause");
    return 0;
}
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
19.09.2010, 20:21  [ТС]     Точка с координатами #3
Спасибо огромное!Почему я сразу не подумала про формулу расстояния!!!Спасибо!
Только вот в одном номере,тут уже формула расстояний не действует.Тут уже область представляет собой квадрат(1 на 1) ,у которого срезаны углы(прямоугольные треугольники ,у которых катеты равны 0.5).Никто не подаст идею,как в этом случае можно задать оставшуюся область(8ми угольник)?Пожалуйста,подскажите,не могу сообразить.

Добавлено через 22 минуты
Пожалуйста ,подскажите.У меня таких 5 похожих задач!Дайте идею!Как задать???
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
19.09.2010, 20:24     Точка с координатами #4
Цитата Сообщение от barlog Посмотреть сообщение
Спасибо огромное!Почему я сразу не подумала про формулу расстояния!!!Спасибо!
Только вот в одном номере,тут уже формула расстояний не действует.Тут уже область представляет собой квадрат(1 на 1) ,у которого срезаны углы(прямоугольные треугольники ,у которых катеты равны 0.5).Никто не подаст идею,как в этом случае можно задать оставшуюся область(8ми угольник)?Пожалуйста,подскажите,не могу сообразить.
Включайте логику, блин
Проверяете, не находится ли точка в квадрате.
Потом проверяете, не находится ли точка в одном из "вырезанных" треугольников.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.09.2010, 20:24     Точка с координатами #5
http://ru.wikipedia.org/wiki/Алгорит...многоугольнике
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
19.09.2010, 20:31  [ТС]     Точка с координатами #6
Это я понимаю прекрасно.В квадрате или нет.Но как записать это для программы?Центр квадрата ведь в начале координат.Как это все записать для каждой четверти?...

Добавлено через 53 секунды
Спасибо silent_1991.

Добавлено через 3 минуты
Как-то в викепедии замудренно написано...и я половину не знаю...у меня было только 2 занятия по C++,мы прошли только ввод и вывод,и оператор if...а как-нить по проще и по понятнее...
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.09.2010, 20:34     Точка с координатами #7
barlog,
Ну и что, что в начале координат. Пишите функцию, которая проверяет, не лежит ли точка в каждом из треугольников, возвращающую 0 в случае, если точка лежит в одном из них, или 1 в противном случае.

Псевдо
Код
int проверка()
{
    if (точка лежит в первом треугольнике) return 0;
    if (точка лежит во втором треугольнике) return 0;
    if (точка лежит в третьем треугольнике) return 0;
    if (точка лежит в четвёртом треугольнике) return 0;
    return 1;
}
Добавлено через 1 минуту
В википедии дан код, там два вложенных цикла и куча арифметических операций... Так что ничего сложного, сложность вся в матчасти.
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
19.09.2010, 20:38  [ТС]     Точка с координатами #8
я не знаю,что такое возвращающее 0...и к чему оно...зачем?...знаю только if...else...(((
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.09.2010, 20:41     Точка с координатами #9
barlo,
Тогда без функции, этот код вставить в основную программу, и везде вместо return 0; писать "Не попадает", а вместо return 1 - "Попадает". Сами разберётесь, как проверку попадания в треугольники делать? Этот вопрос уже не по программированию, и не по си++ в частности.
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
19.09.2010, 20:58  [ТС]     Точка с координатами #10
да я знаю,голова слабо работает...Всего 12 треугольников(в данном случае).И как я для каждого в разных четвертях задам ураснения ,используя if...?
...я безнадежна((

Добавлено через 7 минут
в викепедии речь идет о каких-то массивах...((

Добавлено через 1 минуту
алгоритм проверки принадлежности к треугольникам мне ясен...а вот само задание треугольников?как задать эти треугольники?они еще не все одинаковые...

Добавлено через 2 минуты
Про сумму всех треугольников тоже ясно...разбившееся маленькие в сумме составляют исходный...все ясно...логика выполнения ясна...а как же это реализовать в программе?как задать это разбиение?...
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
19.09.2010, 21:02     Точка с координатами #11
Цитата Сообщение от barlog Посмотреть сообщение
да я знаю,голова слабо работает...Всего 12 треугольников(в данном случае).И как я для каждого в разных четвертях задам ураснения ,используя if...?
...я безнадежна((
Добавлено через 7 минут
в викепедии речь идет о каких-то массивах...((
Добавлено через 1 минуту
алгоритм проверки принадлежности к треугольникам мне ясен...а вот само задание треугольников?как задать эти треугольники?они еще не все одинаковые...
Добавлено через 2 минуты
Про сумму всех треугольников тоже ясно...разбившееся маленькие в сумме составляют исходный...все ясно...логика выполнения ясна...а как же это реализовать в программе?как задать это разбиение?...
Да вы заходите в гости, всё расскажем и покажем. Чего уж клавиатуру мучить.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.09.2010, 21:04     Точка с координатами #12
Стоп. Откуда их 12?
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
19.09.2010, 21:18  [ТС]     Точка с координатами #13
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
int into(double sx, double sy)
{
    int pj, pk=0;
    double wrkx, yu, yl;
    for (pj=0; pj<n; pj++)
    {
        yu = y[pj]>y[(pj+1)%n]?y[pj]:y[(pj+1)%n];
        yl = y[pj]<y[(pj+1)%n]?y[pj]:y[(pj+1)%n];
        if (y[(pj+1)%n] - y[pj])
            wrkx = x[pj] + (x[(pj+1)%n] - x[pj])*(sy - y[pj])/(y[(pj+1)%n] - y[pj]);
        else
            wrkx = x[pj];
        if (yu >= sy) 
            if (yl < sy)
            {
                if (sx > wrkx)
                        pk++;
                if (fabs(sx - wrkx) < 0.00001) return 1;
            }
        if ((fabs(sy - yl) < 0.00001) && (fabs(yu - yl) < 0.00001) && (fabs(fabs(wrkx - x[pj]) + fabs(wrkx - x[(pj+1)%n]) - fabs(x[pj] - x[(pj+1)%n])) < 0.0001))
            return 1;
    }
    if (pk%2) 
        return 1;
    else
        return 0;
}
Как я понимаю это решает мою задачу....но мне здесь ничего не понятно....можно как-то проще сделать?Добрые люди,помогите,пожалуйста.

Добавлено через 2 минуты
ну оператор if -ясно....а что под ним написано - нет...

Добавлено через 2 минуты
как откуда 12...по 3 треугольника в каждой четверти...а если не обращать внимание на четверти,то их будет 8.....наверное.....

Добавлено через 2 минуты
а я не знаю pointlnPolygon...
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.09.2010, 21:23     Точка с координатами #14
Теперь я вас не понимаю... Тут ничего сверхъестественного нет, всё стандартно. Скажите, что вам не понятно?

Добавлено через 2 минуты
Здесь много операторов иф. Что конкретно не ясно?
и с чего по 3 треугольника в каждой четверти-то? Дан квадрат. У него срезаны углы. У квадрата центр в начале координат. Следовательно по одному треугольнику в каждой четверти.
а я не знаю pointlnPolygon...
К чему это?..
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
19.09.2010, 21:31  [ТС]     Точка с координатами #15
Неа он не так срезан....смотрите у нас есть квадрат с центром в начале координат...рассмотрим например 1 четверть она тоже квадрат(размеры 1 на 1) и у этого квадратика срезают маленький уголок(прямоугольный треугольник с катетами по 0.5),в результате вместо этого квадратика получается пятиугольник с 3мя прямыми углами и 2мя тупыми....и если соединить начало координат с двумя вершинами этого пятиугольника будет 3 треугольника....2 прямоугольных и 1 равнобедренный...

Добавлено через 1 минуту
это я виновата:размер всего квадрата 2 на 2.Это координаты пересечения с x и y равны 1.Извините...

Добавлено через 30 секунд
Вот из-за чего непонимание...
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.09.2010, 21:34     Точка с координатами #16
Можно текст задания дословно?
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
19.09.2010, 21:44  [ТС]     Точка с координатами #17
Текста нет только рисунок...это вот эта область....Определить принадлежит точка с координатами x и y данной области или нет?Область это квадрат размером 2 на 2 в центре координат со срезанными уголками,так как описано выше.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.09.2010, 21:57     Точка с координатами #18
Ну а хотя бы рисунок выложите
barlog
2 / 2 / 0
Регистрация: 03.11.2009
Сообщений: 227
19.09.2010, 22:07  [ТС]     Точка с координатами #19
вот это ...и центр его в начале координат
Изображения
 
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2010, 22:12     Точка с координатами
Еще ссылки по теме:

C++ Принадлежит ли точка с координатами (х, у) заданной области
C++ Точка с координатами (х, у) принадлежит части плоскости
C++ - Принадлежит ли точка с координатами (х, у) заданной области C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.09.2010, 22:12     Точка с координатами #20
Ну и где вы видите 12 треугольников? Вам сначала надо определить, попадает ли точка в квадрат. Отбросив то, что у него срезаны углы. А затем определить, не попадает ли точка в один из срезанных углов (т.е. в один из треугольников). Если точка лежит в квадрате и не лежит ни в одном из треугольников - она лежит в области. иначе - не лежит.
Yandex
Объявления
19.09.2010, 22:12     Точка с координатами
Ответ Создать тему
Опции темы

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