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

функция нахождения точки пересечения отрезков (прямых) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
agros
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 5
23.05.2011, 15:05     функция нахождения точки пересечения отрезков (прямых) #1
Не могу понять в чем ошибка (не синтаксическая).
Есть функция нахождения точки пересечения отрезков(прямых)
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
[CPP]
//функция находит точку пересечения отрезков(прямых) по векторно-параметрической формуле
point myvector::intersect(myvector v2, vect_line type)
{
    point result;
    float ua, ub;
    float x1, x2, x3, x4, y1, y2, y3, y4, ch, zn;
    x1 = get_first_point().getx();
    x2 = get_second_point().getx();
    x3 = v2.get_first_point().getx();
    x4 = v2.get_second_point().getx();
    
    y1 = get_first_point().gety();
    y2 = get_second_point().gety();
    y3 = v2.get_first_point().gety();
    y4 = v2.get_second_point().gety();
 
    ch = (x4-x3)*(y1-y3) - (y4-y3)*(x1-x3);
    zn = (y4-y3)*(x2-x1) - (x4-x3)*(y2-y1);
    ua = ch/zn;
    cout << "ua = " << ua <<endl;
    ch = (x2-x1)*(y1-y3) - (y2-y1)*(x1-x3);
    zn = (y4-y3)*(x2-x1) - (x4-x3)*(y2-y1);
    ub = ch/zn;
    cout << "ub = " << ub<<endl;
    float x, y;
    x = x1 + ua * (x2-x1);
    y = y1 + ua * (y2-y1);
    
    cout << "ua * (y2 - y1) = " <<ua * (y2 - y1)<<endl;
    cout << "y1 = " <<y1<<endl;
    cout <<"y1 + ua * (y2-y1) = " <<y1 + ua * (y2-y1)<<endl;
    
    
    if(type == LINE_TO_LINE)
        result.setxy(x, y);
    if(type == VECT_TO_VECT)
        if(ua>=0 && ua<=1 && ub>=0 && ub<=1)
            result.setxy(x, y);
    if(type == LINE_TO_VECT)
        if(ub>=0 && ub<=1)
            result.setxy(x, y);
    if(type == VECT_TO_LINE)
        if(ua>=0 && ua<=1)
            result.setxy(x, y);
 
    return result;
}
[/CPP]

главная функция:
C++
1
2
3
4
5
6
7
8
9
int main()
{
    myvector a(point(5, 2), point(8, -1));
    myvector b(point(9, 0), point(3, 0));
    point c;
    c = a.intersect(b, VECT_TO_LINE);
    c.show();
    return 0;
}
создается два отрезка a, b,
точка с - точка пересечения отрезка а с прямой, проведенной через отрезок b


почему-то именно с такими аргументами функция странно срабатывает:

ua = 0.666667
ub = 0.333333
ua * (y2 - y1) = -2
y1 = 2
y1 + ua * (y2-y1) = -5.96046e-008
show():
point ?(7, -5.96046e-008) Для продолжения нажмите любую клавишу . . .

По идее должна получится точка point ?(7, 0) так как -2 + 2 = 0
(не обращайте внимания на знак вопроса - это имя точки по умолчанию)

Добавлено через 3 часа 22 минуты
Заменил типы c float на double - заработало, видимо разрядов не хватало
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2011, 15:05     функция нахождения точки пересечения отрезков (прямых)
Посмотрите здесь:

C++ Координаты пересечения 2-х прямых.
C++ Найти точку пересечения двух отрезков
Координаты точки пересечения двух отрезков C++
C++ Напечатать координаты точки пересечения прямых
Вычисление координат точки пересечения двух заданных уравнениями прямых C++
C++ Две прямые описываются уравнениями напечатать координаты точки пересечения этих прямых, либо сообщить что эти прямые совпада
C++ Пользователь вводит две пары вещественных чисел: k 1,b1 и k 2,b2. Составить функцию для определения точки пересечения двух прямых y=k1x+b1 и y=k2x+b2,
Дайте готовый код нахождения точки пересечения окружности с прямой :-) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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