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

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

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

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

29.09.2016, 12:58. Просмотров 207. Ответов 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";
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2016, 12:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос По координатам отрезков определить, пересекаются ли они (C++):

Даны два отрезка действительной прямой. Определить, пересекаются ли они - C++
Даны два отрезка действительной прямой. Определить, пересекаются ли они, и если да, найти длину их пересечения. Помогите пожалуйста )Если...

Даны длины четырёх отрезков. Определить, могут ли они быть сторонами параллелограма - C++
Друзья, помогите пожалуйста решить 2 задачки и записать их на С++. 1.Даны длины четырёх отрезков. Определить, могут ли они быть сторонами...

По заданным целочисленным координатам на плоскости определить какую геометрическую фигуру они образуют - C++
По заданным целочисленным координатам четырех точек на плоскости определить , какую геометрическую фигуру они образуют , если их соединить...

Пересекаются ли отрезки [A,B] и [C,D], где A,B,C,D – координаты отрезков на числовой оси (ответ- да или нет) - C++
Написать функцию, организовать ее вызов в главной функции программы. Используя перегрузку, осуществите ее работу с целыми и вещественными...

Выяснить пересекаются ли эти прямые или они параллельны - C++
Задание таково: пользователь вводит координаты двух прямых, программа должна выяснить: пересекаются ли эти прямые или они параллельны? Если...

Вычисление площади треугольника по координатам концов отрезков с ++ - C++
Три отрезка заданы координатами своих концов. Определить, можно ли построить из них треугольник, если - да, то вычислить его площадь

3
Apostol584
241 / 147 / 73
Регистрация: 26.11.2012
Сообщений: 374
Завершенные тесты: 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;
}
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).
1
Apostol584
241 / 147 / 73
Регистрация: 26.11.2012
Сообщений: 374
Завершенные тесты: 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 секунд
вроде работает
0
29.09.2016, 22:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2016, 22:56
Привет! Вот еще темы с ответами:

Определить, пересекаются ли прямая и окружность - C++
Задана окружность с центром в точке О(x0,y0) и радиусом R0 и прямая y=ax+b. Определить, пересекаются ли прямая и окружность. При...

Определить, пересекаются ли парабола и прямая - C++
Определите, пересекаются ли парабола у=cx2+dx+f и прямая y=ax+b. При положительном ответе найти точки пересечения.

Определить, пересекаются ли прямая и окружность - C++
Задана окружность с центром в точке О(x0,y0) и радиусом R и прямая у=ах+b. Определить, пересекаются ли прямая и окружность. При...

Определить в скольких точках пересекаются окружности - C++
Заданы две окружности: с центром в точке О1(x0, y0) и радиусом R0 и с центром в точке О2(x1, y1) и радиусом R1. Определите, во скольких...


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

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

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