Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 5

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

23.05.2011, 15:05. Показов 3389. Ответов 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
[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 - заработало, видимо разрядов не хватало
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2011, 15:05
Ответы с готовыми решениями:

Формула нахождения точки пересечения двух прямых
q all, need help! формула работает нормально вроде, всё окей. Но как узнать где эта точка пересечения, одного TRUE от формулы не хватит(( ...

Использовать функцию нахождения координат точки пересечения двух прямых и вычисления площади треугольника
Здравствуйте, необходимо решить задачу, используя функцию. Условие задачи: Три прямые на плоскости заданы уравнениями аkx+bky+ck,...

Найти точки пересечения прямых проходящих через заданные точки
Всем привет! Прошу помощи в решении задачи: Дана система координат X:Y (по 25 точек в каждую сторону) В ней расположен ряд точек в...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.05.2011, 15:05
Помогаю со студенческими работами здесь

Координаты точки пересечения прямых
1.Имеются две прямые заданные уравнениями: y=a1x+b1 и y=a2x+b2 2.Написать программу,выдающую координаты точки пересечения прямых ...

Найти координаты точки пересечения прямых
Даны вещественные числа a1,b1,c1,a2,b2,c2. Напечатать координаты точки пересечения прямых ,описываемых уравнениями a1x+b1y=c1 и a2x+b2y=c2,...

Напечатать координаты точки пересечения прямых
4.Две прямые описываются уравнениями a1x+b1y+c1=0, a2x+b2y+c2+0. Напечатать координаты точки пересечения этих прямых либо сообщить, что эти...

Нахождение точки пересечения двух прямых в пространстве
Здрасьте. Имеется два отрезка в пространстве и координаты их концов. Как найти точку пересечения этих отрезков (если она есть)...

Определение точки пересечения двух отрезков
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; struct line { double x0, y0, x1, y1; }; ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru