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

Входит ли точка в заштрихованную область? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
xEmpire
23 / 23 / 9
Регистрация: 07.12.2012
Сообщений: 169
Завершенные тесты: 1
29.01.2013, 18:21     Входит ли точка в заштрихованную область? #1
Добрый вечер!
Собственно дан график:

Нужно создать программу, которая будет проверять, входит ли точка (вводит пользователь) в этот график (заштрихованная область).

Вопросов несколько:
Самый главный пожалуй: как проверить, входит ли точка в треугольник?
2) Что делать, если вершина нижнего треугольника не дана ?
Изображения
 
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bumbaram
 Аватар для bumbaram
47 / 47 / 1
Регистрация: 13.02.2012
Сообщений: 176
29.01.2013, 18:38     Входит ли точка в заштрихованную область? #2
1) Определяешь по координатам, в какой четверти точка находится. Это тривиально. Для каждой четверти(кроме первой судя по картинке) составляешь уравнение прямой по двум точкам, которые у тебя на картинке даны. Ну и находишь в какой полуплоскости относительно прямой находится точка.
2) Как это не дана? У какого треугольника. На картинке вроде все есть.
xEmpire
23 / 23 / 9
Регистрация: 07.12.2012
Сообщений: 169
Завершенные тесты: 1
29.01.2013, 18:42  [ТС]     Входит ли точка в заштрихованную область? #3
Цитата Сообщение от bumbaram Посмотреть сообщение
1) Определяешь по координатам, в какой четверти точка находится. Это тривиально. Для каждой четверти(кроме первой судя по картинке) составляешь уравнение прямой по двум точкам, которые у тебя на картинке даны. Ну и находишь в какой полуплоскости относительно прямой находится точка.
2) Как это не дана? У какого треугольника. На картинке вроде все есть.
Не ту картинку залил.
Вот:
Изображения
 
xEmpire
23 / 23 / 9
Регистрация: 07.12.2012
Сообщений: 169
Завершенные тесты: 1
29.01.2013, 19:34  [ТС]     Входит ли точка в заштрихованную область? #4
bumbaram, вопрос:
если это 2 или 3 четверти, то что-бы моя точка входила в мою область косое произведение должно быть <=0.
А в 4 четверти как быть? Так же или наоборот, а то запутался
bumbaram
 Аватар для bumbaram
47 / 47 / 1
Регистрация: 13.02.2012
Сообщений: 176
29.01.2013, 20:50     Входит ли точка в заштрихованную область? #5
Рассмотрим для 4й четверти. Буду делать по первому рисунку т.к. без нижней точки условий не хватает. Думаю на 2м рисунке просто опечатка в книге, либо вы что-то не дописали.
1) Находим уравнение прямой по двум точкам (3, 0) и (0, -5). Получается
y = 5/3*x - 5;
Как искать объяснять думаю не нужно. Система из 2х уравнений, общий вид прямой y=kx+b;
2) Для четвертой четверти нас интересуют точки выше над прямой. Допустим нам задана точка M(k,t) тогда
псевдокод
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double f(double x) {
    return (5/3*x - 5);
}
 
int main() {
    // тут дана точка M(k,t)
    if ( f(k) > t) {
        // тут получается что значение ординаты ф-ции больше чем у точки, следовательно
        // точка лежит ниже. Значит она не нужна
    } else {
        // а если попали сюда. Значит точка нужна
    }
}
Будь внимателен, я это набирал в блокноте. Так что придется понять и поправить.
xEmpire
23 / 23 / 9
Регистрация: 07.12.2012
Сообщений: 169
Завершенные тесты: 1
29.01.2013, 21:08  [ТС]     Входит ли точка в заштрихованную область? #6
bumbaram, Спасибо за подсказку!
Нижний треугольник посчитал за правильный и в итоге решил сделать так (Вдруг кому-то понадобиться:
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
#include <iostream>
#include <windows.h>
using namespace std;
 
void main () {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int x,y;
    cout << "Введите координаты вашей точки: ";
    cin >> x >> y;
    int Ax = -5,Ay=0; //[-5,0];
    int Bx=0,By=3; // [0,3];
    int Cx=0,Cy=-5; //[0,-5];
    int Dx=5,Dy=0; // [5,0]
        // Определяем в какой четверти находиться точка.
    if (x>0 && y >0) { // Точка лежит в 1 четверти
        cout << "Данная точка не входит в заштрихованную область"<< endl;
    }
    if  (x<0 && y>0) {
        //находим косое произведение
        //Если косое произведение  <= 0, тогда наша точка входит в нужную область
         int ABx=Bx-Ax, ABy=By-Ay;       
         /* 
         Находим координаты вектора AM(x,y): 
            x= Mx-Ax;
            y=My-Ay;
         */      
         int Mx=x-Ax;
         int My=y-Ay;
         int result = ABx*My-Mx*ABy;
         if (result <= 0)
         cout << "Данная точка входит в заштрихованную область"<< endl;
         else
         cout << "Данная точка не входит в заштрихованную область"<< endl;      
    }
    if  (x<0 && y<0) {
         int ACx=Cx-Ax, ACy=Cy-Ay;       
         int Mx=x-Ax;
         int My=y-Ay;
         int result = ACx*My-Mx*ACy;
         if (result >= 0)
         cout << "Данная точка входит в заштрихованную область"<< endl;
         else
         cout << "Данная точка не входит в заштрихованную область"<< endl;      
    }   
    if  (x>0 && y<0) {
         int CDx=Dx-Cx, CDy=Dy-Cy;       
         int Mx=x-Cx;
         int My=y-Cy;
         int result = CDx*My-Mx*CDy;
         if (result >= 0)
         cout << "Данная точка входит в заштрихованную область"<< endl;
         else
         cout << "Данная точка не входит в заштрихованную область"<< endl;      
    }
    if (x==0 && y==0 ) { // Точка лежит в начале координат;
         cout << "Данная точка входит в заштрихованную область"<< endl;
    }
}
P.S: Тему можно закрывать.
Yandex
Объявления
29.01.2013, 21:08     Входит ли точка в заштрихованную область?
Ответ Создать тему
Опции темы

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