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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2009, 22:26   #1
Kail
 
Регистрация: 08.05.2009
Сообщений: 7
Вопрос Геометрическая идентификация

VB. Идет генерация точек на PictureBox. Потом точки соединяются ломаными (при помощи MouseUp). Как забить эти точки в массив? Причем чтобы можно было различить, где заканчивается одна ломаная и начинается следующая...
Вложения
Тип файла: rar identific.rar (2.6 Кб, 12 просмотров)
Kail вне форума Ответить с цитированием
Старый 16.05.2009, 22:41   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Как забить эти точки в массив?
А, собственно, зачем именно в массив?
Может лучше в коллекцию (с ней удобнее работать)?

И зачем внутри цикла n = n - 1?
Код:
For r = 1 To n Step 1
X = Rnd
Y = Rnd
' сюда пишем код добавления в массив (или в коллекцию)
Area.Circle (X, Y), 0.002, vbRed
n = n - 1
Next r
Цитата:
Причем чтобы можно было различить, где заканчивается одна ломаная и начинается следующая...
Опиши суть программы.
А то непонятно, для чего это вообще нужно.
Может, есть более простой способ всё это реализовать...
EducatedFool вне форума Ответить с цитированием
Старый 16.05.2009, 22:59   #3
Kail
 
Регистрация: 08.05.2009
Сообщений: 7
По умолчанию Описание

Программа идентификации пользователя. Пользователю предлагается графическое поле с множеством точек, сгенерированным случайным образом. Точки трех цветов. Его задача – соединить некоторое количество точек одному ему известным образом. Нарисовавшись вдоволь, пользователь нажимает кнопочку Enter, и производится вход. Пароль - слово. Дело в том, что раскладка клавиатуры (точнее та ее часть, что отведена под буквы) мысленно поделена на 3 цвета: верхний ряд букв (й, ц, у, к, е, н, г, ш, щ, з, х, ъ) – красный цвет, средний ряд (ф, ы, …) – зеленый, нижний (я,ч, …) – синий. Чтобы получить букву, нужно нарисовать ломаную, начало и конец которой в точках, соответствующих цвету ряда. Причем состоять она должна из такого количества отрезков, какая по счету эта буква слева.
Kail вне форума Ответить с цитированием
Старый 16.05.2009, 23:07   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Ну ладно. Допустим, пароль у нас будет "пароль"
Для ввода этого пароля пользователь будет вынужден нарисовать 6 ломаных линий (5 зелёных и одну синюю)
Кстати, это самый извращённый способ ввода пароля, о котором я когда-либо слышал

Как по этим линиям определить пароль?
Только что если запоминать порядок рисования этих линий - а иначе мы получим 120 равновероятных паролей из 6 букв...
Так что задача усложняется.

И зачем тебе такая программа?
Дипломная работа, что ли?
EducatedFool вне форума Ответить с цитированием
Старый 16.05.2009, 23:16   #5
Kail
 
Регистрация: 08.05.2009
Сообщений: 7
По умолчанию

Курсовая... А способ я сам придумал!))) И так как защита уже прошла, интерфейс и функционал заявлен, писать мне это придется... А вот соображалки не хватает(
Kail вне форума Ответить с цитированием
Старый 16.05.2009, 23:26   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Ну, алгоритм не так уж и сложен.
Сейчас попробую написать пример.

Сегодня уже не успею, продолжу с утра, если будет время.
Когда тебе сдавать работу?

Последний раз редактировалось EducatedFool; 16.05.2009 в 23:58.
EducatedFool вне форума Ответить с цитированием
Старый 17.05.2009, 02:36   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот что получилось:



Проверяй:
Вложения
Тип файла: rar Kail.rar (10.9 Кб, 12 просмотров)
EducatedFool вне форума Ответить с цитированием
Старый 18.05.2009, 21:27   #8
Kail
 
Регистрация: 08.05.2009
Сообщений: 7
По умолчанию

Ура!!! Спасибо! Работает... Вот только мне бы код еще...
Kail вне форума Ответить с цитированием
Старый 19.05.2009, 02:19   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А я-то думал, тебе только exe-шник надо

В коде нет ничего сложного:
Код:
Sub УстановленаНоваяТочка()
    info = "": If LineInd = 0 Then LineInd = 1
    If lines(LineInd).col <> 0 And lines(LineInd).col <> nearestPoint.col Then
        beepL
        info = "Сначала завершите предыдущую линию": GoTo выход
    End If
    CurrPoint = nearestPoint.index
    On Error Resume Next: Err.Clear
        lines(LineInd).Points.Add CurrPoint, "a" & CurrPoint ' добавляем только уникальные точки
        If Err.Number = 457 And LastPoint <> CurrPoint Then
            info = "Эта точка уже присутствует в линии":  BeepL2: GoTo выход
        End If
    On Error GoTo 0
    
    lines(LineInd).col = nearestPoint.col
    
    If LastPoint = CurrPoint And lines(LineInd).Points.Count = 1 Then
        Set lines(LineInd).Points = New Collection: lines(LineInd).col = 0: BeepL2
        info = "Линия удалена": LastPoint = 0: GoTo выход ' 2 щелчка на первой точке = удаляем линию
    End If
    
    If LastPoint = CurrPoint Then ' 2 щелчка на одной точке = начинаем новую линию
        LineInd = LineInd + 1:  BeepH2:
        info = "Можете начинать линию №" & LineInd: GoTo выход
    End If
    If LastPoint = 0 Then LastPoint = nearestPoint.index: beepH: GoTo выход ' первая точка в линии
    
    LastPoint = CurrPoint: beepH
выход:
    ОтрисоватьВсеЛинии
    If info <> "" Then
        Form2.Text_err.Text = info
    Else
        Form2.Text_err.Text = "Текущая линия " & LineInd & ": цвет=" & _
        ЦветЛинии(nearestPoint.col) & ",  точек:" & lines(LineInd).Points.Count
    End If
End Sub
Этого должно хватить для понимания идеи...

Ну а если возникнут сложности, ты всегда можешь обратиться в личку, и получить весь исходный код программы (небесплатно, разумеется)
EducatedFool вне форума Ответить с цитированием
Старый 19.05.2009, 22:19   #10
Kail
 
Регистрация: 08.05.2009
Сообщений: 7
По умолчанию

Справедливо... Я ждал эту фразу с самого начала. Вот только есть одна сложность: я живу в Петропавловске (это Казахстан) на стипендию 9000 тенге (около 1800 рублей) в месяц. Так что как бы ни было велико мое желание купить у тебя сию программу...
Кстати, она получилась - что надо, особенно эти области вокруг точек... И если тебя не затруднит, ты мог бы мне словесно объяснить алгоритм. Вот как то так) В любом случае спасибо за участие!
Kail вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Идентификация клиента сокет squall Помощь студентам 0 18.04.2009 19:36
Идентификация пользователя Gorychev PHP 9 10.02.2009 08:56
Геометрическая задача С++ bloo[d] Общие вопросы C/C++ 9 30.01.2008 18:27
Идентификация пользователя на каком-либо сайте. Продвинутые пользователи - к Вам вопрос. Макса Безопасность, Шифрование 9 23.10.2007 21:36