4 / 4 / 2
Регистрация: 25.08.2014
Сообщений: 36
1

Определение принадлежности точки фигуре

05.09.2014, 00:44. Показов 2532. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.

Есть задача определения принадлежности точки фигуре.

Как думаете, нормальный алгоритм или можно как-то улучшить, при условии, что в книге прошел пока что только условные операторы?
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
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstdlib>
 
int main()
{
    double x1, y1, x2, y2, x3, y3, px, py; // Определяем точки треугольника xn yn; далее - точку P px py;
    double tmp, tmp2, tmp3; // Создаем временные переменные произведений векторов и точки;
    double sqrx, sqry; // Создаем переменные для второй части фигуры, состоящей из окружности и квадрата. Для радиуса окружности
                       // принимаем сторону квадрата;
    printf("Enter coordinates of the tri\nVertex A [x y]: ");
    scanf("%lf %lf", &x1, &y1); // Задаем вершину A;
    printf("Vertex B [x y]: "); 
    scanf("%lf %lf", &x2, &y2); // Задаем вершину B;
    printf("Vertex C [x y]: ");
    scanf("%lf %lf", &x3, &y3); // Задаем вершину С;
    printf("Enter coordinates of the square [x, 0], [y, 0]: "); 
    scanf("%lf %lf", &sqrx, &sqry); // Задаем квадрат SQR с начальной точкой [0, 0];
    printf("Enter coordinates of the point\nP [xp yp]: ");
    scanf("%lf %lf", &px, &py); // Задаем точку P;
    // Идем против часовой стрелки - с точкой сравниваются последовательно вектора X2Y2 X1Y1 --> X3Y3 X2Y2 --> X1Y1 X3Y3;
    tmp  = (x2 - x1)*(py - y1) - (y2 - y1)*(px - x1); 
    tmp2 = (x3 - x2)*(py - y2) - (y3 - y2)*(px - x2);
    tmp3 = (x1 - x3)*(py - y3) - (y1 - y3)*(px - x3);
    // Алгоритм такой: проверяем наличие точки на треугольнике. В случае присутствия - конец алгоритма, иначе инициализируем
    // следующую проверку на наличие точки в пределах квадрата [SQRX X SQRY] и за пределами окружности с радиусом равным одной из
    // сторон квадрата; 
    if ((tmp >= 0 && tmp2 >= 0 && tmp3 >= 0) || (tmp <= 0 && tmp2 <= 0 && tmp3 <= 0)) // Все три переменные должны быть одного знака, возможен 0 на одной из сторон);
        printf("The point is on the shape\n");
    
    else if (sqrx >= px && sqry >= py && (((px - sqrx)*(px - sqrx) + (py - sqry)*(py - sqry)) >= (sqrx * sqrx))) // Первое условие - проверка на пределы квадрата, 
                                                                                                                 // второе - по теореме Пифагора проверяем новый радиус, образованный точкой P.
                                                                                                                 // должно выполнятся условие - [точка в пределах квадрата] и [новый радиус >= исходный);
    printf("The point is on the shape\n");
    else
        printf("The point is not on the shape\n");
 
    system("pause");
    return 0;
}
заодно хотелось спросить - такие комментарии читаемы или комментарии лучше всегда писать с новой строчки?
Миниатюры
Определение принадлежности точки фигуре  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2014, 00:44
Ответы с готовыми решениями:

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

Определение принадлежности точки к области
Надо определить принадлежность точки к заданной области. Рисунок прикрепил. Вот код который...

Определение принадлежности точки к графику
Помогите написать текст, для такого графика

Определение принадлежности точки к данному треугольнику
Треугольник задан в плоскости точками A, B, C: A (xa, ya) B (xb, yb) C (xc, yc). Составить алгоритм...

1
4 / 4 / 2
Регистрация: 25.08.2014
Сообщений: 36
05.09.2014, 01:14  [ТС] 2
Еще важный вопрос - условие существования треугольника не включил пока, но тут тоже альтернативу Пифагору не вижу...
0
05.09.2014, 01:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2014, 01:14
Помогаю со студенческими работами здесь

Определение принадлежности точки указанной области (перевести с Pascal на C++)
var x,y: real; begin write('Введите значения x, y: '); readln(x,y); if...

Принадлежность точки фигуре
Программа для проверки, принадлежит ли точка с координатами (x, y) в заданной области Объясните,...

Принадлежность точки к фигуре
Добрый вечер. Задача: написать программу, создающую 4 рандомных координаты(x,y) и проверяющую...

Принадлежность точки фигуре
Понять не могу почему не работает так как требуется. Хотя на код смотрю вроде всё верно. Может...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru