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

Определить угол, под которым виден многоугольник. Алгоритм! - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Получить 2 строку из 1 путем вычеркивания символов http://www.cyberforum.ru/cpp-beginners/thread1035232.html
Даны две строки st1 и st2. Нужно выяснить, можно ли строку st2 получить из строки st1 путем вычеркивания некоторых символов. Мой ход мыслей таков: вводим строки с клавиатуры, в цикле по i и по j проверяем равны ли соответствующие символы двух строк, если не равны, то символы из строки 1 перебрасываем в 3 буферную строку, при этом уменьшая количество символов в 1 строке. Если равны, то выводим...
C++ Функция (одномерный массив) Помогите пожалуйста,с написанием следующей программы: Используя функцию, написать программу, которая в одномерном массиве, состоящем из n вещественных элементов, вычисляет: 1) количество положительных элементов массива; 2) сумму элементов массива, расположенных после последнего элемента, равного нулю. http://www.cyberforum.ru/cpp-beginners/thread1035231.html
Как остановить цикл при вводе enter? C++
#include <iostream> using namespace std; int main() { for (;;) { //как остановить цикл при вводе enter }
Написать программу на языке С++, в которой алгоритм сортировки одномерного массива оформить в виде C++
Задание: Написать программу на языке С++, в которой алгоритм сортировки одномерного массива оформить в виде: макроопределения шаблона функции. Вывод значений массива на экран оформить в виде макроса шаблона функции. Метод сортировки выбирается следующим образом (N – номер по журналу): если N % 6 = 0 - сортировка выбором (по возрастанию), если N % 6 = 1 - сортировка обменом (по...
C++ Добавить к каждому числу корень квадратный из абсолютного значения произведения http://www.cyberforum.ru/cpp-beginners/thread1035217.html
Есть задание на шаблоны функции я слаб в си++, прощу помощи, по заданию, оставляйте комментарии по возможности что делаете в коде Написать программу на языке С++, в которой оформлены в виде шаблонов функций (массив передается в функцию в качестве параметра) следующие действия: 1) изменения элементов массива согласно своему варианту; 2) вычисления максимального элемента массива с явной...
C++ Дана целочисленная матрица.(С использованием функций и динам. памяти) Друзья помогите пожалуйста написать прогу на C++, по заданию, если есть возможность напротив кода пишите комментарии по кодингу. Спасибо Задание: 1. Написать программу на языке С++ согласно своему варианту из практического занятия 7. Использовать динамическое выделение памяти для двумерных массивов. Каждый пункт задания должен быть оформлен в виде функции. Для выделения памяти под... подробнее

Показать сообщение отдельно
RodionSabitov
1 / 1 / 0
Регистрация: 19.07.2012
Сообщений: 71

Определить угол, под которым виден многоугольник. Алгоритм! - C++

09.12.2013, 23:33. Просмотров 314. Ответов 0
Метки (Все метки)

Добрый вечер, господа! Следующая задачка:
Дан многоугольник набором точек и произвольная точка на плоскости. Определить угол, под которым виден многоугольник с заданной точки.

Имеющийся у меня алгоритм решения (просто находит максимальный угол между вектором исходной точки и фиксированной вершины многоугольника и вектором, образованным также исходной точкой и всеми остальными вершинами. далее находит минимальный угол. и разность max - min выдает за искомую). Я подставил пример с треугольником (1,3) (5,7) (11,3) и исходную точку (6,1). Должен быть угол 135°, а выдает 77°.
Есть ли у кого идеи по поводу алгоритма решения данной задачи?

Текст программы:
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <math.h>
 
#define MAXN 100000
#define INF 1e+9
 
 
struct point {
    double x, y;
};
//point constructor
struct point ppoint (double _x, double _y) {
    struct point res; 
    res.x = _x;
    res.y = _y;
    return res;
}
//Vector == point
#define Vector struct point
//vector substraction
Vector minus (Vector a, Vector b) {
    return ppoint(a.x - b.x, a.y - b.y);
}
//scalar multiplication
double dot(Vector a, Vector b) {
    return a.x * b.x + a.y * b.y;
}
//cross multiplication
double cross( Vector a,  Vector b) {
    return a.x * b.y - a.y * b.x;
}
//angle between vectors
double angle( Vector a,  Vector b) {
    return atan2(cross(a, b), dot(a, b));
}
//point reading
struct point pread() {
    double x, y;
    scanf("%lf%lf", &x, &y);
    return ppoint(x, y);
}
 
struct point polygon[MAXN];
 
int main() {
    //freopen("inp", "r", stdin);
    //freopen("outp", "w", stdout);
    double min = INF, max = -INF; 
    double ans = 0;
    double a;
    int n; 
    int i;
    struct point o;
    printf("input dot\n");  
    o = pread();
    printf("input n\n");
    scanf("%d", &n);
    printf("input dots of polygon\n");
    for (i = 0; i < n; i++) {
        polygon[i] = pread();
    }
    for (i = 0; i < n; i++) {
        printf("%lf %lf\n",polygon[i].x,polygon[i].y);
    }
 
 
    // ans == MAX_ANGLE - MIN_ANGLE
    for (i = 1; i < n; i++) {
        a = angle(minus(polygon[i], o), minus(polygon[1], o));
        printf("%d %lf\n", i, a);
        min = min > a ? a : min;
        max = max < a ? a : max;
    }
    //ans = max - min
    printf("%lf %lf\n", max, min);
    printf("%lf", (max - min));
    
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru