Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/39: Рейтинг темы: голосов - 39, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 30.07.2009
Сообщений: 6
1

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

27.05.2012, 18:31. Просмотров 8177. Ответов 4
Метки нет (Все метки)

День добрый уважаемые читатели форума. Разбираю задачу по расчету Координаты точки пересечения двух отрезков и столкнулся с проблемой.
Выбивает подобные ошибки при компиляции 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();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2012, 18:31
Ответы с готовыми решениями:

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

Найти точку пересечения двух отрезков
как найти точку пересечения двух отрезков, если даны координаты начала и конца обеих

Даны четыре точки на числовой оси A, B, C И D. найти длину пересечения отрезков AB И CD
Я только начал изучать, не могли бы подсказать метод построения решения этой задачи

Вычислительная геометрия (Даны координаты центра, R окружности, координаты точки вне окруж-ти. Найти точку пересечения одной из касательных с окруж-ю)
Даны координаты центра (xc,yc) и радиус R окружности, координаты точки (x,y) вне окружности. Найти...

4
1545 / 911 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
27.05.2012, 18:34 2
IHOR1989, вам бы следовало описать структуру точки, чтобы было удобнее работать -
C++
1
2
3
struct point {
    double x, y;
};
Ф-ия Point_Crossing по описанию возвращает float, а вы пытаетесь возвратить (x, y). что это? для этого вам и нужна структура, функция будет возвращать точку.
1
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). что это? для этого вам и нужна структура, функция будет возвращать точку.
Простите за навязчивость, а можно ли пример хотя бы на этой программе. В этой теме новичок, хотелось бы освоить.
0
1545 / 911 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
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 нужно переписать, т.е. сами точки передавать и с ними работать, но нужно будет сам сделаешь.
1
2 / 2 / 0
Регистрация: 17.08.2016
Сообщений: 43
15.08.2019, 18:42 5
Вот способы определения того, пересекаются ли отрезки, и нахождения их точки пересечения:
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
struct Point // Точка
{ 
    float x, y; 
    Point(float X = 0, float Y = 0) :x(X), y(Y) {} 
};
struct Line // Линия
{ 
    Point f, s;
    Line(Point F = Point(), Point S = Point()) :f(F), s(S) {} 
};
 
bool isIntersecting(Line f, Line s) // Пересекаются ли
{
    return (((s.f.x - f.f.x) * (f.s.y - f.f.y) - (s.f.y - f.f.y) * (f.s.x - f.f.x)) * 
        ((s.s.x - f.f.x) * (f.s.y - f.f.y) - (s.s.y - f.f.y) * (f.s.x - f.f.x)) < 0) &&
        (((f.f.x - s.f.x) * (s.s.y - s.f.y) - (f.f.y - s.f.y) * (s.s.x - s.f.x)) * 
        ((f.s.x - s.f.x) * (s.s.y - s.f.y) - (f.s.y - s.f.y) * (s.s.x - s.f.x)) < 0);
}
 
Point intersection(Line f, Line s) // Точка пересечения
{
    float a1 = f.s.y - f.f.y;
    float b1 = f.f.x - f.s.x;
    float c1 = -f.f.x * (f.s.y - f.f.y) + f.f.y * (f.s.x - f.f.x);
 
    float a2 = s.s.y - s.f.y;
    float b2 = s.f.x - s.s.x;
    float c2 = -s.f.x * (s.s.y - s.f.y) + s.f.y * (s.s.x - s.f.x);
 
    float d = a1 * b2 - b1 * a2;
 
    return Point((-c1 * b2 + b1 * c2) / d, (-a1 * c2 + c1 * a2) / d);
}
Использование:
C++
1
2
3
4
5
6
7
8
9
// f - First
// s - Second
 
Line f(Point(10, 10), Point(30, 30));
Line s(Point(30, 10), Point(10, 30));
 
Point I;
if (isIntersecting(f, s))
    I = intersection(f, s);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2019, 18:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

Пересекаются ли прямые, и, если да, то найти координаты точки пересечения
Ввод состоит из координат точек прямых (две точки - первая прямая, ещё две - вторая прямая). ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.