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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Naomi Aori
0 / 0 / 0
Регистрация: 11.08.2016
Сообщений: 10
#1

По координатам отрезков определить, пересекаются ли они - C++

29.09.2016, 12:58. Просмотров 178. Ответов 3

Добрый день! По координатам отрезков требуется определить пересекаются ли они. У меня на 5-ом тесте валится, помогите, пожалуйста, найти ошибку
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
// Example program
#include <iostream>
#include <string>
 
using namespace std;
int main()
{
 double x1, y1, x2, y2, x3,y3,x4,y4;
 double xx1, yy1, xx2, yy2, xx3, yy3, xx4, yy4;
 cin>> x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;
 bool check1=false, check2 = false;
 xx2=x2-x1;
 yy2=y2-y1;
 
 xx3=x3-x1;
 yy3=y3-y1;
 
 xx4=x3-x1;
 yy4=y4-y1;
 
 if ((xx2*yy3-yy3*xx3)*(xx2*yy4-yy2*xx4)<0 || (xx2*yy3-yy3*xx3)*(xx2*yy4-yy2*xx4)==0) check1=true;
 xx1=x1-x2;
 yy1=y1-y2;
 
 xx3=x3-x2;
 yy3=y3-y2;
 
 xx4=x3-x2;
 yy4=y4-y2;
 
 if ((xx1*yy3-yy1*xx3)*(xx1*yy4-yy1*xx4)<=0) check2=true;
 
 if (check1==true && check2==true)
 cout<<"Yes";
 else cout<<"No";
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2016, 12:58     По координатам отрезков определить, пересекаются ли они
Посмотрите здесь:
Даны два отрезка действительной прямой. Определить, пересекаются ли они C++
Даны длины четырёх отрезков. Определить, могут ли они быть сторонами параллелограма C++
По заданным целочисленным координатам на плоскости определить какую геометрическую фигуру они образуют C++
Пересекаются ли отрезки [A,B] и [C,D], где A,B,C,D – координаты отрезков на числовой оси (ответ- да или нет) C++
C++ Выяснить пересекаются ли эти прямые или они параллельны
Вычисление площади треугольника по координатам концов отрезков с ++ C++
C++ Определить, пересекаются ли прямая и окружность
C++ Определить, пересекаются ли парабола и прямая
Определить, пересекаются ли прямая и окружность C++
Определить, пересекаются ли контур прямоугольника и окружность C++
Определить в скольких точках пересекаются окружности C++
Определить, когда круг и квадрат касаются (пересекаются) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Apostol584
238 / 144 / 72
Регистрация: 26.11.2012
Сообщений: 371
Завершенные тесты: 2
29.09.2016, 15:16     По координатам отрезков определить, пересекаются ли они #2
Цитата Сообщение от Naomi Aori Посмотреть сообщение
У меня на 5-ом тесте валится
можно ваши тесты?

Добавлено через 1 час 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//g++  4.9.3
 
#include <iostream>
 
bool cross(float ax1, float ay1,float ax2, float ay2, 
           float bx1, float by1, float bx2, float by2)
{
   float v1 = (bx2 - bx1)*(ay1 - by1) - (by2 - by1)*(ax1 - bx1);
   float v2 = (bx2 - bx1)*(ay2 - by1) - (by2 - by1)*(ax2 - bx1);
   float v3 = (ax2 - ax1)*(by1 - ay1) - (ay2 - ay1)*(bx1 - ax1);
   float v4 = (ax2 - ax1)*(by2 - ay1) - (ay2 - ay1)*(bx2 - ax1);
   return (v1*v2 < 0 && v3*v4 < 0);
}
 
 
int main()
{
    std::cout << (cross(1, 1, 5, 5, 1, 2, 3, 1)? "true" : "false") << std::endl;
    std::cout << (cross(1, 1, 1, 1, 1, 1, 1, 1)? "true" : "false") << std::endl;
    std::cout << (cross(1, 1, 4, 1, 1, 1, 4, 1)? "true" : "false") << std::endl;
    
    return 0;
}
SpBerkut
Объявлятель переменных
908 / 234 / 113
Регистрация: 24.09.2011
Сообщений: 875
Завершенные тесты: 2
29.09.2016, 15:47     По координатам отрезков определить, пересекаются ли они #3
Apostol584, Ваш вариант не отлавливает пересечения на краю отрезков. cross(0, 0, 0, 2, 0, 1, 1, 1) выдаёт false, хотя есть пересечение в точке (0;1).
Apostol584
238 / 144 / 72
Регистрация: 26.11.2012
Сообщений: 371
Завершенные тесты: 2
29.09.2016, 22:56     По координатам отрезков определить, пересекаются ли они #4
SpBerkut, у меня с математикой не очень

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
#include <iostream>
#include <cmath>
 
bool cross(float ax1, float ay1,float ax2, float ay2, 
           float bx1, float by1, float bx2, float by2)
{
 
    float dx1 = ax2 - ax1, dy1 = ay2 - ay1; 
    float dx2 = bx2 - bx1, dy2 = by2 - by1; 
    float dxx = ax1 - bx1, dyy = ay1 - ay1;
    
   if ((dy2*dx1 - dx2*dy1) == 0) 
        return false;
    
    if ((dx1*dyy - dy1*dxx) < 0)
        return false; 
    if ((dx2*dyy - dy2*dxx) < 0)
        return false; 
        
   return true;
}
 
int main()
{
    std::cout << (cross(1, 1, 1, 1, 1, 1, 1, 1)? "true" : "false") << std::endl;//no
    std::cout << (cross(1, 1, 4, 1, 1, 1, 4, 1)? "true" : "false") << std::endl;//no
    std::cout << (cross(0, 0, 0, 2, 0, 1, 0, 2)? "true" : "false") << std::endl;//no
    std::cout << (cross(1, 1, 5, 5, 1, 2, 3, 1)? "true" : "false") << std::endl;//yes
    std::cout << (cross(0, 0, 0, 2, 0, 1, 1, 1)? "true" : "false") << std::endl;//yes
    std::cout << (cross(0, 0, 0, 2, 0, 0, 1, 1)? "true" : "false") << std::endl;//yes
    std::cout << (cross(0, 0, 0, 2, 0, 1, 1, 2)? "true" : "false") << std::endl;//yes
    
    return 0;
}
Добавлено через 18 секунд
вроде работает
Yandex
Объявления
29.09.2016, 22:56     По координатам отрезков определить, пересекаются ли они
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru