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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Функция, которая возвращает сумму квадратов параметров http://www.cyberforum.ru/cpp-beginners/thread302595.html
разработайте заданную функцию( 1) с тремя входными параметрами типа float x, a, b, два из которых (a, b) имеют значение по умолчанию, и продемонстрируйте работу этой функции, сделав в главной программе несколько вызовов функции с разными данными 1.разработайте функцию, которая возвращает сумму квадратов параметров программирования.
C++ Функция, которая возвращает среднее арифметическое элементов параметра-массива разработайте заданную функцию( 1) и продемонстрируйте работу этой функции, сделав в главной программе несколько вызовов функции с разными данными. Функция должна выводить на экран адресы элементов масива. 1. разработайте функцию, в которую передается массив типа float, что возвращает среднее арифметическое элементов массива. http://www.cyberforum.ru/cpp-beginners/thread302588.html
C++ составить алгоритм!!!
1.Сложить алгоритм, который определяет, чи есть данная буква обозначениям гласного звука. 2. Плот составлен из n колод длиной l и диаметром d. Сложить алгоритм определения, чи выдержит этот плот k путешественников со средней массой m. 3. Сложить алгоритм вычисления, может ли кирпич, который имеет форму прямоугольного паралелепипеда с ребрами a, b, c, пройти через прямоугольное...
Описать структуру с именем NOTE, содержащую следующие поля C++
Описать структуру с именем NOTE, содержащую следующие поля: - фамилия, имя; - номер телефона; - дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: - ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE; - записи должны быть упорядочены по датам рождения; - вывод на экран информации о человеке, номер телефона которого введен с...
C++ Удалить из текста, находящегося в файле, каждое четное предложение http://www.cyberforum.ru/cpp-beginners/thread302578.html
Написать прогу. Удалить из текста, находящегося в файле, каждое четное предложение на СИ
C++ Функция Написать функцию. Задан массив вещественных чисел х1, х2, ..., хn. Вычислить y=x1+x1x2+x1x2x3+...+x1x2...xm, где m - либо номер первого отрицательного элемента массива х, либо общее количество элементов n в массиве x. подробнее

Показать сообщение отдельно
agros
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 5
23.05.2011, 15:05     функция нахождения точки пересечения отрезков (прямых)
Не могу понять в чем ошибка (не синтаксическая).
Есть функция нахождения точки пересечения отрезков(прямых)
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 - заработало, видимо разрядов не хватало
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru