С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925

Построение ломанной линии с использованием мыши

28.01.2012, 23:04. Показов 2935. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго время суток всем. Помогите мне, пожалуйста, с таким вопросом.
Ситуация следующая...Есть форма на которой уже построена система координат, где левый верхний угол место нуля.
1. Как можно при помощи мыши строить на данной форме ломанную таки образом, чтобы при перемещении свободного конца новой линии прописывались координаты. И при этом ломанная линия не может выходить за пределы системы координат.
2. И каким образом можно прекратить режим рисования ломанной линии (использования мыши в качестве рисования ломанной линии).

Вот я тут пытался сделать то о чём я писал выше, но возникает оч много линий =(


Visual Basic
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
Option Explicit
Dim koor_x As Double, koor_y As Double
Dim klava As Boolean
Dim p() As Integer, n As Integer, i As Integer
Dim x1 As Integer, x2 As Integer
Dim y1 As Integer, y2 As Integer
Private Form
Private Sub Form_Load()
x1 = 0
y1 = InputBox("Введите высотную отметку - y1")
End Sub
Private Sub Form_MouseMove(button As Integer, Shift As Integer, X As Single, y As Single)
    x2 = X
    y2 = Int(y / 25) * 25
    Line (x1, y1)-(x2, y2)
    Form1.CurrentX = x2
    Form1.CurrentY = y2
    'Print y2
End Sub
Private Sub form_MouseDown(button As Integer, Shift As Integer, X As Single, y As Single)
    x2 = X
    y2 = y
    Line (x1, y1)-(x2, y2)
    x1 = x2
    y1 = y2
    Form1.CurrentX = x2
    Form1.CurrentY = y2
    Print y2
End Sub

Заранее всем спасибо, кто откликнулся.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2012, 23:04
Ответы с готовыми решениями:

Вычислить длину L ломанной линии
В квадрат со стороной l случайным образом одна за другой вбрасываются 100 точек и последовательно создается ломаная линия. Вычислить длину...

Рассчитать длину ломанной линии
Программа позволяет рисовать мышью произвольную ломанную линию. Подскажите, как выводить длину этой линии? import java.awt.BasicStroke;...

Рисование ломанной линии и фиксирование её клавишей
Есть такая задачка: Рисуется ломаная линия. Фиксирование первых и очередных узлов осуществляется нажатием клавиши ''Enter'',...

9
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
29.01.2012, 13:21
Зажав левую кнопку, таскаешь свободный конец, затем отпускаешь и нажимаешь правую.
Visual Basic
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
Option Explicit
Dim koor_x As Double, koor_y As Double
Dim klava As Boolean
Dim p() As Integer, n As Integer, i As Integer
Dim x1 As Integer, x2 As Integer
Dim y1 As Integer, y2 As Integer
Dim Lin(1 To 64, 1 To 64, 1 To 64, 1 To 64) As Long
Dim nLin As Integer, x1Lin(1 To 64) As Long, y1Lin(1 To 64) As Long, x2Lin(1 To 64) As Long, y2Lin(1 To 64) As Long
Private Sub Form_Load()
x1 = 100: y1 = 100: nLin = 1
'y1 = InputBox("Введите высотную отметку - y1", , 1)
'x1 = InputBox("Введите высотную отметку - x1", , 1)
End Sub
Private Sub form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    x2 = X
    y2 = Y
    If Button = 2 Then
    cls
    nLin = nLin + 1
    'ReDim Preserve Lin(1 To nLin, 1 To nLin, 1 To nLin, 1 To nLin)
     For i = nLin - 1 To 64
      x1Lin(i) = x1: x2Lin(i) = x2: y1Lin(i) = y1: y2Lin(i) = y2
     Next
    For i = 1 To nLin
     Line (x1Lin(i), y1Lin(i))-(x2Lin(i), y2Lin(i)): Print y2Lin(i)
    Next
    x1 = x2
    y1 = y2
    Form1.CurrentX = x2
    Form1.CurrentY = y2
    'Print y2
    End If
End Sub
 
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 Then
    Line (x1, y1)-(x2, y2), &H8000000F
    ForeColor = &H8000000F
    Print y2
    ForeColor = RGB(0, 0, 0)
    x2 = X
    y2 = Int(Y / 25) * 25
     Line (x1, y1)-(x2, y2), RGB(200, 100, 200)
     Print y2
    Form1.CurrentX = x2
    Form1.CurrentY = y2
    End If
    'Print y2
End Sub
1
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
29.01.2012, 17:04  [ТС]
Интересно =) Единственное...в моём коде представлена начальная отметка, и изменение координаты по оси ординат с кратностью 25. Допустим ввели начальную координату (это будет точка 1) и от этой точки при помощи мышки оттягиваем курсор мыши за которым тянется линия, не удерживая никакую клавишу мыши. Здесь не знаю как сделать чтобы даже при перемещении свободного конца линии (курсора мыши) рядом писалась координата ? Из моего кода, во-первых, получается много линий, не знаю как затирать! и во вторых, не знаю как сделать так чтобы рядом с перемещаемым курсором мыши писались координаты свободного конца линии.
Допустим, при перемещении свободного конца линии, где находится курсор мыши, прописывается необходимая координата (которая мне нужна) я соответственно делаю клик левой кнопкой мыши. В месте где я сделал клик (2 точка после начальной) прописывается координата ее местоположения на данной форме. Ну и т.д.
Хотел спросить ещё вот что, а что это за массивы?
Для хранения линий и значений координат линий??
Visual Basic
1
2
Dim Lin(1 To 64, 1 To 64, 1 To 64, 1 To 64) As Long
Dim nLin As Integer, x1Lin(1 To 64) As Long, y1Lin(1 To 64) As Long, x2Lin(1 To 64) As Long, y2Lin(1 To 64) As Long
спасибо =)
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
29.01.2012, 18:25
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от proft Посмотреть сообщение
Для хранения линий и значений координат линий??
Dim Lin(1 To 64, 1 To 64, 1 To 64, 1 To 64) As Long
Да, именно так. А 64 взял с потолка, чтобы не делать Redim.
А координаты понял, как я рисовал?
Visual Basic
1
2
3
4
5
    ForeColor = &H8000000F
    Print y2
    ForeColor = RGB(0, 0, 0)
    y2 = Int(Y / 25) * 25
     Print y2
То есть во время движения курсора координаты рисуются чёрным цветом и , если движение продолжаются , тут же рисуются серым(как бы они есть, но на фоне формы их не видно), поэтому рядом с курсором только текущие чёрные координаты видны.
То же самое касается линий.

Добавлено через 26 минут
Visual Basic
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
Option Explicit
Dim koor_x As Double, koor_y As Double
Dim klava As Boolean
Dim p() As Integer, n As Integer, i As Integer
Dim x1 As Integer, x2 As Integer
Dim y1 As Integer, y2 As Integer
Dim nLin As Integer, x1Lin(1 To 64) As Long, y1Lin(1 To 64) As Long, x2Lin(1 To 64) As Long, y2Lin(1 To 64) As Long
Private Sub Form_Load()
x1 = 100: y1 = 100: nLin = 1
'y1 = InputBox("Введите высотную отметку - y1", , 1)
'x1 = InputBox("Введите высотную отметку - x1", , 1)
End Sub
Private Sub form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    x2 = X
    y2 = Y
    If Button = 1 Then
    Cls
    nLin = nLin + 1
    'ReDim Preserve Lin(1 To nLin, 1 To nLin, 1 To nLin, 1 To nLin)
     For i = nLin - 1 To 64
      x1Lin(i) = x1: x2Lin(i) = x2: y1Lin(i) = y1: y2Lin(i) = y2
     Next
    For i = 1 To nLin
     Line (x1Lin(i), y1Lin(i))-(x2Lin(i), y2Lin(i)): Print y2Lin(i)
    Next
    x1 = x2
    y1 = y2
    End If
End Sub
 
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Line (x1, y1)-(x2, y2), &H8000000F
    ForeColor = &H8000000F
    Print y2
    ForeColor = RGB(0, 0, 0)
    x2 = X
    y2 = Int(Y / 25) * 25
     Line (x1, y1)-(x2, y2), RGB(200, 100, 200)
     Print y2
End Sub
1
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
31.01.2012, 18:58  [ТС]
Спасибо огромное)
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
02.02.2012, 22:45
Вот посмотри с перерисовкой по таймеру
Вложения
Тип файла: rar рисование ломаной.rar (2.1 Кб, 21 просмотров)
1
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
03.02.2012, 19:50
С положительным и отрицательным предельными углами
Вложения
Тип файла: rar рисование ломаной.rar (2.5 Кб, 22 просмотров)
1
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
05.02.2012, 08:58
Вот ещё вариант с определением координат точки пересечения. Дополнительная фигура (щелчок на кнопке меню Dop_Fig) ) рисуется цветом QBColor(13) (впрочем, это неважно). Во время построения основной ломаной по таймеру один раз в секунду в процедуре Proverka_peresecheniya происходит проверка цвета точек линии, которую ты хочешь нарисовать. Если на ней встречается точка цвета
QBColor(13), то она определяется как точка пересечения с координатами xPoint, yPoint, и из нее опускается перпендикуляр. Процедура Proverka_peresecheniya работает пока только справа от оси У.(Сам допишешь, если нужно будет, это уже мелочь)
У меня возник вопрос : площадь какой фигуры нужно определить? Покажи на рисунке, а то на словах непонятно.
Миниатюры
Построение ломанной линии с использованием мыши  
Вложения
Тип файла: rar рисование ломаной.rar (3.8 Кб, 14 просмотров)
1
321 / 289 / 104
Регистрация: 12.04.2011
Сообщений: 925
09.02.2012, 10:57  [ТС]
Доброго дня SoftIce. Спасибо за выложенные коды) Вот представляю тебе эскиз того , что должно быть в итоге. Спасибо)
З.Ы. Я ещё там в личку тебе написал...
Миниатюры
Построение ломанной линии с использованием мыши  
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
10.02.2012, 13:32
Сделал пока только для первой фигуры (потому что несложно для треугольника) вычисляется площадь, но только после щелчка.
Площадь в квадратных твипах
Миниатюры
Построение ломанной линии с использованием мыши  
Вложения
Тип файла: rar рисование ломаной.rar (4.6 Кб, 19 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.02.2012, 13:32
Помогаю со студенческими работами здесь

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

Вычислить и вывести на консоль длину ломанной линии
Разработать структуру с именем POINT, содержащую поля: • горизонтальная координата точки на плоскости; • вертикальная координата точки...

Рисование ломанной линии по точкам которые ставит пользователь
Преподаватель попросил выполнить данное задание "Пользователь ставит точки на плоскости, прога отрисовывает ломанные линии с максимальной...

Построение ломанной кривой через процедуры MouseDown и MouseMove
Доброго времени суток. Если кто может помогите пожалуйста в решении таких 2-ух задач. "Необходимо построить ломанную кривую,...

Форма делится на сектора. Курсором мыши можно рисовать линии. Цвет линии зависит
Народ спасайте. Задача такова " Форма делится на сектора (их количество задает пользователь). Курсором мыши можно рисовать линии. Цвет...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru