Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2017, 23:54   #1
vova_makar
Пользователь
 
Регистрация: 14.04.2015
Сообщений: 22
По умолчанию пересечение отрезков прямых C++

Мне нужно сделать програму которая будет проверять пересекаются отрезки и если пересекаются то где?
НО я не знаю формулу как это сделать, подскажите
Что я уже написал(у меня есть два конструктора):
Код:
#include "Line.h"

Line::Line(const Point2f& start, const Vector2f& dir)
    : mStart(start)
    , mDir(dir)
{}

Line::Line(const Point2f& start, const Point2f& end)
    : mStart(start)
    , mDir(start, end)
{
}

bool Overlaps(const Line& l1, const Line& l2, Point2f* pOverlapPoint)
{}
vova_makar вне форума Ответить с цитированием
Старый 10.03.2017, 06:05   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Скажите а вы пятый класс школы закончили? Еще можно чуть голову включить и понять, что если отрезки пересекаются, то они имеют общую точку, а значит надо просто решить простое уравнение...
p51x вне форума Ответить с цитированием
Старый 11.03.2017, 16:26   #3
vova_makar
Пользователь
 
Регистрация: 14.04.2015
Сообщений: 22
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Скажите а вы пятый класс школы закончили? Еще можно чуть голову включить и понять, что если отрезки пересекаются, то они имеют общую точку, а значит надо просто решить простое уравнение...
От что у меня вышло)
Код:
bool Overlaps(const Line& line1, const Line& line2, Point2f* pOverlapPoint)
{
    Vector2f b = line1.mDir;
    Vector2f d = line2.mDir;
    Vector2f c = line2.mStart - line1.mStart;

    float t = (dotProduct(perp(d), c)) / (dotProduct(perp(d), b));
    float u = (dotProduct(perp(b), c)) / (dotProduct(perp(d), b));
    if((0 <= t <= 1)&& (0 <= u <= 1))
        return true;

    *pOverlapPoint = line1.mStart + t * line1.mDir;
}
Результат не правильный выводит. Я не вижу что не так. Подскажите
vova_makar вне форума Ответить с цитированием
Старый 11.03.2017, 17:13   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вылажи весь проект.
Я его пощупаю, потому что так сложно мне что-то сказать.
ura_111 вне форума Ответить с цитированием
Старый 11.03.2017, 17:45   #5
vova_makar
Пользователь
 
Регистрация: 14.04.2015
Сообщений: 22
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Вылажи весь проект.
Я его пощупаю, потому что так сложно мне что-то сказать.
Код:
#include "Line.h"

Line::Line(const Point2f& start, const Vector2f& dir)
    : mStart(start)
    , mDir(dir)
{}

Line::Line(const Point2f& start, const Point2f& end)
    : mStart(start)
    , mDir(start, end)
{
}

bool Overlaps(const Line& line1, const Line& line2, Point2f* pOverlapPoint)
{
    Vector2f b = line1.mDir;
    Vector2f d = line2.mDir;
    Vector2f c = line2.mStart - line1.mStart;

    float t = (dotProduct(perp(d), c)) / (dotProduct(perp(d), b));
    float u = (dotProduct(perp(b), c)) / (dotProduct(perp(d), b));
    if((0 <= t <= 1)&& (0 <= u <= 1))
        return true;

    *pOverlapPoint = line1.mStart + t * line1.mDir;
}
Код:
#pragma once

#include <iostream>
#include "Point2f.h"
#include "Vector2f.h"

struct Line
{
    Line(const Point2f& start, const Vector2f& dir);
    Line(const Point2f& start, const Point2f& end);
    ~Line() = default;

    Point2f mStart;
    Vector2f mDir;
};

bool Overlaps(const Line& line1, const Line& line2, Point2f* pOverlapPoint);
vova_makar вне форума Ответить с цитированием
Старый 11.03.2017, 17:55   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

А где main()? (точка входа)

Ты его запускал?
Или теоретически рассматриваешь?
ura_111 вне форума Ответить с цитированием
Старый 11.03.2017, 17:58   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я имел ввиду полный (найполнейший) проект...
Потому что, это семантика (когда по самому коду говоришь где ошибка), но до такого я ещё не дорос... Многое я просо не знаю.

p.s.: я пока ещё учусь.

Последний раз редактировалось ura_111; 11.03.2017 в 18:01.
ura_111 вне форума Ответить с цитированием
Старый 11.03.2017, 18:32   #8
vova_makar
Пользователь
 
Регистрация: 14.04.2015
Сообщений: 22
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Я имел ввиду полный (найполнейший) проект...
Потому что, это семантика (когда по самому коду говоришь где ошибка), но до такого я ещё не дорос... Многое я просо не знаю.

p.s.: я пока ещё учусь.
это и есть весь проект. все классы которые я использую: вектор, точка есть стандартные
main:
Код:
#include "Line.h"

int main()
{
    Line line1 = Line(Point2f(0,6), Point2f(6,1));
    Line line2 = Line(Point2f(1,3), Point2f(5,5));

    Line line3 = Line(Point2f(1,4), Point2f(7,1/2));
    Line line4 = Line(Point2f(7/2,5/2), Point2f(7,5));

    Line line5 = Line(Point2f(1,4), Point2f(7,1/2));
    Line line6 = Line(Point2f(5,0), Point2f(0,7));

    Line line7 = Line(Point2f(0,7), Point2f(7,0));
    Line line8 = Line(Point2f(8,-1), Point2f(10,-3));

    Point2f point;
    if (Overlaps(line1, line2, &point))
    {
        std::cout << "The segments overlaps"<< "\n";
        std::cout << "Coordinates point:"<< "\n";
        std::cout <<point << std::endl;
    }
    else
    {
        std::cout << "The segments do not overlaps"<< "\n";
    }


    return 0;
}
vova_makar вне форума Ответить с цитированием
Старый 11.03.2017, 18:44   #9
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Почему у меня красное?
Что это такое?

0.jpg

ты сказал, что полный проект, - а если полный, то ничего красного не должно быть...
(остальное я закоментировал, что-бы не мешало)

Последний раз редактировалось ura_111; 11.03.2017 в 18:46.
ura_111 вне форума Ответить с цитированием
Старый 11.03.2017, 18:48   #10
vova_makar
Пользователь
 
Регистрация: 14.04.2015
Сообщений: 22
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Почему у меня красное?
Что это такое?

Вложение 86727

ты сказал, что полный проект, - а если полный, то ничего красного не должно быть...
(остальное я закоментировал, что-бы не мешало)
подключи math.h а их убери
vova_makar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача. Даны координаты концов четырех отрезков. Выяснить, лежат ли все или некоторые из этих отрезков на пересекающихся прямых Naijl Visual C++ 0 28.11.2016 18:11
Пересечение отрезков BoozZzilla Помощь студентам 3 06.04.2012 13:51
Пересечение отрезков Helen236 Паскаль, Turbo Pascal, PascalABC.NET 9 06.04.2012 12:08
C++ Пересечение отрезков Liza Dalbek Помощь студентам 2 22.12.2010 23:20
Пересечение отрезков Пaвeл Помощь студентам 1 30.04.2010 05:46