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

Пересечение отрезков. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка http://www.cyberforum.ru/cpp-beginners/thread337602.html
Всем привет! #include<iostream.h> #include<conio.h> #include<string.h> enum Shape{prizm,parallelepiped,cube,pyramid,cone,cylinder}; class Body {
C++ BMP в массив и обратно (на чистом С++) Надо загнать изображение BMP, допустим, 100x200 пикселей, в двухмерный массив 100x200 (то-есть 20 000 ячеек). Чтобы потом можно было изображение обратно вогнать в файл из массива. Как лучше всего это осуществить? P.S. Все это мне надо сделать на чистом C++. P.P.S. На сколько я знаю, файл *.bmp состоит не только из самого изображение, но и его информационной части (количество цветов, размер... http://www.cyberforum.ru/cpp-beginners/thread337596.html
работа с .jpg и .mp3 C++
скажите пожалуста какие стантартные(для visual C++ 2010 expres)библиотеки позваляют просматривать .jpg и проигрывать .mp3? з.ы. в гугл не посылать я там искал,по сайту тоже искал но не чё толковова не нашол(
непонятная конструкция, шаблоны C++
столкнулся со странной конструкцией template<typename C> static One test(int C::*); в template<typename T> class IsClassT { private: typedef char One; typedef struct { char a; } Two; template<typename C> static One test(int C::*);
C++ Структура отрезок. http://www.cyberforum.ru/cpp-beginners/thread337576.html
Как сделать правильней и красивее на ваш взгляд - struct tPoint { int x, y; }; struct tSegment { tPoint pt1, pt2; };
C++ Аргументы функции Вопрос на счет аргументов функции в С++. есть такая функция: void Teleport(Player* pPlayer, float array) { int i = 0; pPlayer->TeleportTo(massive, massive, massive, massive, massive); } (pPlayer является экземпляром заранее реализованного объекта, он обозначает игрока, TeleportTo реализована заранее, принимает пять аргументов (uint32 mapID, float X, float Y, float Z, float... подробнее

Показать сообщение отдельно
neske
1427 / 794 / 57
Регистрация: 26.03.2010
Сообщений: 2,737
30.07.2011, 20:20  [ТС]     Пересечение отрезков.
grizlik78, да, конечно - http://********/?main=task&id_task=348
Вот черт, - "вывести слово "Yes", если общая точка есть".
поэтому множество точек тоже пересечение, ведь общая точка есть

Добавлено через 21 минуту
ыы, ошибка на 34 тесте

вроде все варианты рисовал, проверял, должно быть правильно, я уже не понимаю.
буду думать еще, но если вдруг у кого время будет, поглядите код, мб найдете что я не учел.

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
81
82
83
84
85
#include <iostream>
#include <fstream>
#include <algorithm>
 
struct tPoint {
    int x, y;
};
 
struct tSegment {
    tPoint pt1, pt2;
};
 
bool findPt (const tSegment, const tSegment); // ищет общую точку двух отрезков.
bool oneLine (const tSegment, const tSegment); // лежат ли отрезки на одной прямой.
bool commonPart (const tSegment, const tSegment); // имеется ли общая часть у отрезков.
int side (const tSegment, const tPoint); // размещение точки относительно прямой.
int down (const int); // уменьшает число, сохраняя знак.
 
int main() {
    std::ifstream ifs ("input.txt");
    std::ofstream ofs ("output.txt");
    //
    tSegment first, second;
    ifs >> first.pt1.x >> first.pt1.y;
    ifs >> first.pt2.x >> first.pt2.y;
    ifs >> second.pt1.x >> second.pt1.y;
    ifs >> second.pt2.x >> second.pt2.y;
    //
    ofs << (findPt (first, second) ? "Yes" : "No");
    //
    ifs.close();
    ofs.close();
    return 0;
}
 
bool findPt (const tSegment first, const tSegment second) {
    if (oneLine (first, second)) { // если прямые на одной прямой, смотрим,
        if (commonPart (first, second)) // имеют ли они общую часть.
            return true;
        return false;
    }
 
    int rez1 = side (first, second.pt1);
    int rez2 = side (first, second.pt2);
    int rez3 = side (second, first.pt1);
    int rez4 = side (second, first.pt2);
 
    if ((!rez1) || (!rez2) || (!rez3) || (!rez4))
        return true;
 
    return ((rez1 * rez2 < 0) && (rez3 * rez4 < 0));
}
 
bool oneLine (const tSegment first, const tSegment second) {
    return ((!side (first, second.pt1)) && (!side (first, second.pt2)));
}
 
bool commonPart (const tSegment first, const tSegment second) {
    int minx1 = std::min (first.pt1.x, first.pt2.x);
    int miny1 = std::min (first.pt1.y, first.pt2.y);
    int maxx1 = std::max (first.pt1.x, first.pt2.x);
    int maxy1 = std::max (first.pt1.y, first.pt2.y);
    int minx2 = std::min (second.pt1.x, second.pt2.x);
    int miny2 = std::min (second.pt1.y, second.pt2.y);
    int maxx2 = std::max (second.pt1.x, second.pt2.x);
    int maxy2 = std::max (second.pt1.y, second.pt2.y);
 
    // first ниже / левее second
    if ((maxx1 > minx2) || (maxy1 > miny2))
        return true;
    // first выше / правее second
    if ((maxx2 > minx1) || (maxy2 > miny1))
        return true;
 
    return false;
}
 
int side (const tSegment segment, const tPoint pt) {
    return down (((pt.x - segment.pt1.x) * (segment.pt2.y - segment.pt1.y) -
            (pt.y - segment.pt1.y) * (segment.pt2.x - segment.pt1.x)));
}
 
int down (const int x) {
    return (x > 0 ? 1 : x == 0 ? 0 : -1);
}
 
Текущее время: 05:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru