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

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

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

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 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,707
По умолчанию

Скажите а вы пятый класс школы закончили? Еще можно чуть голову включить и понять, что если отрезки пересекаются, то они имеют общую точку, а значит надо просто решить простое уравнение...
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