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

Написать функцию булевского типа, определяющую наличие пересечения заданной прямой и заданного отрезка. - C++

Восстановить пароль Регистрация
 
Antik
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 20
26.06.2012, 23:32     Написать функцию булевского типа, определяющую наличие пересечения заданной прямой и заданного отрезка. #1
ребят нужна помощь

Задачи по программированию.
Задача решается на двух языках.


Задача 10.
Написать функцию булевского типа, определяющую наличие пересечения заданной прямой и заданного отрезка.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2012, 23:32     Написать функцию булевского типа, определяющую наличие пересечения заданной прямой и заданного отрезка.
Посмотрите здесь:

C++ Найти точку пересечения отрезка с прямой
Написать функцию булевского типа, переставляющую местами диагонали квадратной матрицы, соседние с главной. C++
Написать функцию булевского типа, проверяющую попадание точки с заданными координатами в треугольник с вершинами в точках (2,1) (3,0) (-1,0) C++
C++ Написать функцию целого типа, определяющую наличие в первой строке матрицы наличие седловой точки.
Написать функцию булевского типа, определяющую упорядоченность массива целых чисел. C++
C++ Написать функцию булевского типа, проверяющую наличие в файле записи с заданным ключём.
C++ Написать функцию булевского типа, проверяющую попадание точки с заданными координатами в треугольник с вершинами в точках (1,1) (0,2) (-1,0)
Написать функцию, определяющую пересекаются ли два отрезка C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
29.06.2012, 14:47     Написать функцию булевского типа, определяющую наличие пересечения заданной прямой и заданного отрезка. #2
Проверить пересечение прямой и отрезка
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
#include <stdio.h>
#include <malloc.h>
 
// найти пересечение прямых
int f(float a1,float b1,float c1,float a2,float b2,float c2)
{
float det1, det2, det3, x1,y1;
 
// решение системы методом Крамера
det1 = a1*b2 - a2*b1;
 
// система некрамеровская
if (det1 == 0) 
return 0;
 
det2 = (-c1)*b2 - (-c2)*b1;
det3 = a1*(-c2) - a2*(-c1);
 
x1 = det2/det1;
y1 = det3/det1;
 
printf("%.2f %.2f\n", x1, y1); // точка пересечения
 
return 1;
}
 
 
int main()
{
 
float x1,y1,x2,y2; // отрезок
float a1,b1,c1,a2,b2,c2;
 
// прямая задана в формате Ax + By + C = 0
a1 = 1.0;
b1 = 1.0;
c1 =-2.0;
 
x1 = 1;
y1 = 1;
x2 = -1;
y2 = 0;
 
// построить по 2 точкам отрезка прямую в формате Ax + By + C = 0
a2 = y2 - y1;
b2 = x1 - x2;
c2 = x2*y1-x1*y2;
 
 
printf("%d", f(a1,b1,c1,a2,b2,c2));
 
return 0;
}
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
#include <iostream>
 
using namespace std;
 
// найти пересечение прямых
bool f(float a1,float b1,float c1,float a2,float b2,float c2)
{
float det1, det2, det3, x1,y1;
 
// решение системы методом Крамера
det1 = a1*b2 - a2*b1;
 
// система некрамеровская
if (det1 == 0) 
return false;
 
det2 = (-c1)*b2 - (-c2)*b1;
det3 = a1*(-c2) - a2*(-c1);
 
x1 = det2/det1;
y1 = det3/det1;
 
cout << x1 << " " << y1 << "\n"; // точка пересечения
 
return true;
}
 
 
int main()
{
 
float x1,y1,x2,y2; // отрезок
float a1,b1,c1,a2,b2,c2;
 
// прямая задана в формате Ax + By + C = 0
a1 = 1.0;
b1 = 1.0;
c1 =-2.0;
 
x1 = 1;
y1 = 1;
x2 = -1;
y2 = 0;
 
// построить по 2 точкам отрезка прямую в формате Ax + By + C = 0
a2 = y2 - y1;
b2 = x1 - x2;
c2 = x2*y1-x1*y2;
 
 
cout << f(a1,b1,c1,a2,b2,c2);
 
return 0;
}
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
29.06.2012, 15:12     Написать функцию булевского типа, определяющую наличие пересечения заданной прямой и заданного отрезка. #3
Решение системы уравнений и нахождение точки пересечения - это, конечно, адово круто... Но можно и проще. Уравнение прямой A*x + B*y + C = 0. Если прямая пересекает отрезок, то его конечные точки будут по разные стороны от прямой. То есть, если мы подставим их в уравнение прямой, у получившихся чисел будут разные знаки. То есть, их произведение будет отрицательным.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct Point {double x, y;};
struct Segment {Point p1, p2;};
struct Line {double A, B, C;}
 
inline double operator * (const Line& l, const Point& p)
{
    return l.A*p.x + l.B*p.y + l.C;
}
 
inline bool Intersects(const Line &l, const Segment &s)
{
    return (l*s.p1)*(l*s.p2) < 0;
}
Yandex
Объявления
29.06.2012, 15:12     Написать функцию булевского типа, определяющую наличие пересечения заданной прямой и заданного отрезка.
Ответ Создать тему
Опции темы

Текущее время: 19:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru