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

Координаты точки пересечения двух отрезков - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.86
IHOR1989
0 / 0 / 0
Регистрация: 30.07.2009
Сообщений: 6
27.05.2012, 18:31     Координаты точки пересечения двух отрезков #1
День добрый уважаемые читатели форума. Разбираю задачу по расчету Координаты точки пересечения двух отрезков и столкнулся с проблемой.
Выбивает подобные ошибки при компиляции Debug:
Run-Time Check Failure #3 - The variable 'Ay' is being used without being initialized.
Такая ошибка ко всем переменным.
При компиляции в Release выводит не те значения.
Подскажите пожалуйста где накосячил.
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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <clocale>
using namespace std;
float Enter (float,float);
float Point_Crossing (float, float, float, float, float, float, float, float, float, float);
 
float Enter (float a,float b)
{
    std::wcout.imbue(std::locale("Russian_russia.OCP"));
    std::wcout << L"Введите координату x: ";
    cin>>a;
    std::wcout.imbue(std::locale("Russian_russia.OCP"));
    std::wcout << L"Введите координату y: ";
    cin>>b;
    return (a,b);
}
 
float Point_Crossing (float x1, float x2, float x3, float x4, float y1, float y2, float y3, float y4,float x,float y)
{
 
    x=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
    y=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3);
    return(x,y);
}
 
int main()
{
    float x,y;
    float Ax,Ay;
    float Bx,By;
    float Cx,Cy;
    float Dx,Dy;
    std::wcout.imbue(std::locale("Russian_russia.OCP"));
    std::wcout << L"Введите координаты точки А"<<endl;
    Enter (Ax,Ay);
    std::wcout.imbue(std::locale("Russian_russia.OCP"));
    std::wcout << L"Введите координаты точки B"<<endl;
    Enter (Bx,By);
    std::wcout.imbue(std::locale("Russian_russia.OCP"));
    std::wcout << L"Введите координаты точки C"<<endl;
    Enter (Cx,Cy);
    std::wcout.imbue(std::locale("Russian_russia.OCP"));
    std::wcout << L"Введите координаты точки D"<<endl;
    Enter (Dx,Dy);
    Point_Crossing (Ax,Bx,Cx,Dx,Ay,By,Cy,Dy,x,y);
    cout<<x;
    cout<<y;
    getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
27.05.2012, 18:34     Координаты точки пересечения двух отрезков #2
IHOR1989, вам бы следовало описать структуру точки, чтобы было удобнее работать -
C++
1
2
3
struct point {
    double x, y;
};
Ф-ия Point_Crossing по описанию возвращает float, а вы пытаетесь возвратить (x, y). что это? для этого вам и нужна структура, функция будет возвращать точку.
IHOR1989
0 / 0 / 0
Регистрация: 30.07.2009
Сообщений: 6
27.05.2012, 18:42  [ТС]     Координаты точки пересечения двух отрезков #3
Цитата Сообщение от neske Посмотреть сообщение
IHOR1989, вам бы следовало описать структуру точки, чтобы было удобнее работать -
C++
1
2
3
struct point {
    double x, y;
};
Ф-ия Point_Crossing по описанию возвращает float, а вы пытаетесь возвратить (x, y). что это? для этого вам и нужна структура, функция будет возвращать точку.
Простите за навязчивость, а можно ли пример хотя бы на этой программе. В этой теме новичок, хотелось бы освоить.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
27.05.2012, 19:01     Координаты точки пересечения двух отрезков #4
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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <clocale>
using namespace std;
 
struct point {
    float x, y;
};
 
point Point_Crossing (float x1, float x2, float x3, float x4, float y1, float y2, float y3, float y4)
{
 
    float x=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
    float y=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3);
    return {x, y};
}
 
int main()
{
    point pt, A, B, C, D;
    std::wcout.imbue(std::locale("Russian_russia.OCP"));
    std::wcout << L"Введите координаты точки А"<<endl;
    std::cin >> A.x >> A.y;
 
    std::wcout.imbue(std::locale("Russian_russia.OCP"));
    std::wcout << L"Введите координаты точки B"<<endl;
    std::cin >> B.x >> B.y;
 
    std::wcout.imbue(std::locale("Russian_russia.OCP"));
    std::wcout << L"Введите координаты точки C"<<endl;
    std::cin >> C.x >> C.y;
 
    std::wcout.imbue(std::locale("Russian_russia.OCP"));
    std::wcout << L"Введите координаты точки D"<<endl;
    std::cin >> D.x >> D.y;
 
    pt = Point_Crossing (A.x, B.x, C.x, D.x, A.y, B.y, C.y, D.y);
    std::cout << pt.x << " " << pt.y;
    getch();
}
как-то так, но я бы всеравно по-другому написал.
зачем тебе прототипы функций, если ты их описываешь перед мейном?
Вообще саму функцию Point_Crossing нужно переписать, т.е. сами точки передавать и с ними работать, но нужно будет сам сделаешь.
Yandex
Объявления
27.05.2012, 19:01     Координаты точки пересечения двух отрезков
Ответ Создать тему
Опции темы

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