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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Vonder
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 9
#1

Отрисовать выход из лабиринта - C++

22.01.2013, 22:18. Просмотров 467. Ответов 0
Метки нет (Все метки)

Доброго времени суток, дорогие форумчане!
Очень нужна ваша помощь с лабиринтом
Помогите пожалуйста прикрутить волновой алгоритм, как ни борюсь нормально не выходит.
Ссылки на сам алгоритм
http://algolist.manual.ru/maths/grap...tpath/wave.php
http://algolist.manual.ru/games/wavealg.php

Ссылка на картинки-тесты
http://yadi.sk/d/vutQBOal22UhK

На картинке изображены две точки : красная и зеленая, нужно найти кратчайший путь и отрисовать его.
Очень нужна ваша помощь. Как найти точки на картинке разобрался. А с поиском пути не очень.
Очень буду благодарен, если и некоторые комментарии будут.
Заранее спасибо!


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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "stdafx.h"
#include "ololo.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
 
using namespace cv;
using namespace std;
 
bool findRedPoint( Mat &inputImage, Point &outputPoint ) {
    if( inputImage.channels() != 3 ) { // If imgae is not an RGB
        return false;
    }
    else{
        bool flag = false;
        Point solPoint; 
        vector<Mat> planes;
        split(inputImage, planes);
        Mat ImgGray;//серое
        cvtColor(inputImage, ImgGray, CV_RGB2GRAY);
        Mat ImgBin;
        threshold(ImgGray, ImgBin, 200, 255,  CV_THRESH_BINARY);
        for(int i=0; i<inputImage.rows; i++){
            for(int j=0; j<inputImage.cols; j++){
                if(planes[1].at<uchar>(i,j) != ImgBin.at<uchar>(i,j)){
                    solPoint.x = i;
                    solPoint.y = j;
                    flag = true;
                }
            }
        }
        return(flag);
    }
} 
 
bool findGreenPoint( Mat &inputImage, Point &outputPoint ) {
    if( inputImage.channels() != 3 ) { // If imgae is not an RGB
        return false;
    }
    else{
        bool flag = false;
        Point solPoint; 
        vector<Mat> planes;
        split(inputImage, planes);
        Mat ImgGray;//серое
        cvtColor(inputImage, ImgGray, CV_RGB2GRAY);
        Mat ImgBin;
        threshold(ImgGray, ImgBin, 200, 255,  CV_THRESH_BINARY);
        for(int i=0; i<inputImage.rows; i++){
            for(int j=0; j<inputImage.cols; j++){
                if(planes[2].at<uchar>(i,j) != ImgBin.at<uchar>(i,j)){
                    solPoint.x = i;
                    solPoint.y = j;
                    flag = true;
                }
            }
        }
        return(flag);
    }
}
 
bool findRoute( Mat &image, Point &entryPoint, Point &exitPoint ) {
    // ToDo: find and draw a route between entry and exit points 
    // or return FALSE if it's impossible;
    return(true);
}
 
int main( int argc, char *argv[] ) {
    /*if( argc != 2 ) {
        cerr << "Wrong parameters" << endl;
        return -1;
    }*/
    char name[255] = "image.png";
    Mat image = imread( name/*argv[ 1 ]*/, -1 );
    if( !image.data ) {
        cerr << "Can't load " << name/*argv[ 1 ]*/ << " image file" << endl;
        system("pause");
        return -1;
    }
    namedWindow("Source Image", CV_WINDOW_FREERATIO);
    imshow ("Source Image", image);
    Point entryPoint, exitPoint;
    bool x = findRedPoint(image, entryPoint);
    if( findGreenPoint( image, entryPoint ) && ( findRedPoint( image, exitPoint ) ) ) {
        if( findRoute( image, entryPoint, exitPoint ) ) {
            imshow( "Route", image );
            waitKey();
        } else {
            cout << "Can't find a route" << endl;
        }
    } else {
        cout << "Can't find entry or exit point" << endl;
    }
    waitKey();
    return 0;
}
Добавлено через 1 час 37 минут
http://yadi.sk/d/INF5jJjm22hmO
извините, это правильная ссылка на картинки
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2013, 22:18     Отрисовать выход из лабиринта
Посмотрите здесь:

Найти выход из лабиринта - C++
Пожалуйста помогите решить. Перевод. Вопрос задачи: наити выход роботу из лабиринта. Робот проходит только через (.), а это (#)...

Выход из лабиринта. В чем ошибка? - C++
Не могу понять, почему моя программа иногда выдает ошибку, а иногда работает хорошо. Помогите пожалуйста. #include&lt;iostream&gt; #include...

Прохождение лабиринта со стеком - C++
Добрый вечер После запуска программа вылетает с ошибкой Stack Overflow и останавливается на внесение данных в стек (глядела на...

Построение лабиринта на Borland С++ 3.01 - C++
Здравствуйте... Надо написать программу построения лабиринта...длина и ширина лабиринта вводится с клавиатуры. Желательно, чтобы можно...

Чтение лабиринта из файла - C++
ребята , не могу задать чтение элементов лабиринта с файла.. помогите пожалуйста.. const int - никак не задается #include...

Алгоритм обхода лабиринта - C++
Помогите реализовать алгоритм обхода лабиринта, на примере матрицы nxn, где 1 (единицы) это проходимые элементы, а 0 (нули) это...

Прохождение лабиринта с использованием стека - C++
Собственно задание: Создать программу, отыскивающую проход по лабиринту. Лабиринт представляется в виде матрицы, состоящей из...

Программа «поиск выхода из лабиринта» - C++
Открывать файл «карту», имя файла передавать как параметр командной строки. Считать, что в карте замкнутых контуров нет. Стенка — «1»....

Реализация алгоритма обхода лабиринта - C++
Определение границ перколяционного кластера: реализация алгоритма обхода лабиринта. Буду очень благодарен за помощь.

Прохождение лабиринта: неожиданное поведение программы (найти и исправить ошибки) - C++
Всем доброго времени суток. В общем написал я программу для генерации лабиринта и программу для его прохождения. В первой генерирую...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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