Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 28.08.2016
Сообщений: 67

Разработать приложение, позволяющее изображать на форме имитацию сферы , куба

06.09.2016, 18:44. Показов 2065. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как эту программу сделать попроще без кода за 100 строчек ?

Разработать приложение, позволяющее изображать на форме имитацию сферы (метод Circle в цикле), куба (метод Line в цикле), закрашенный эллипс. Ввести в интерфейс приложения следующие элементы управления:
1) созданные на основе объектов HScrollBar и VScrollBar, позволяющие изменять размеры сферы, куба, эллипса;
2) управляющие автоматическим сжатием/увеличением сферы и куба (пульсирующие сфера и куб).
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.09.2016, 18:44
Ответы с готовыми решениями:

Разработать приложение сервера и приложение клиента, позволяющее общаться между клиентами в режиме online
Привет. Нужна прога на с/с++ Разработать приложение сервера и приложение клиента, позволяющее общаться между клиентами в режиме...

Разработать приложение, позволяющее задать дату рождения
Моя задача - Разработайте приложение, позволяющее задать дату рождения с выпадающим списком месяца и подсчитывает возраст пользователя. Я...

Разработать приложение, позволяющее рассчитать сумму подписки на 3 газеты
"Разработать приложение, позволяющее рассчитать сумму подписки на 3(любые)газеты, если известна стоимость подписки на 1 месяц и количество...

13
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
07.09.2016, 10:09
neokrom
пока нарисовал нечто похожее на шар. Подойдет?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Option Explicit
Dim k As Single, R As Single
Dim i As Single
 
Private Sub Command1_Click()
    Pic1.Scale (-200, 200)-(200, -200)
    Pic1.DrawWidth = 3
    R = 150
    For i = 0 To 1.5708 Step 0.261
        k = Cos(i)
        Pic1.Circle (0, 0), R, , , , k
        Pic1.Circle (0, 0), R, , , , 1 / k
    Next
End Sub
Миниатюры
Разработать приложение, позволяющее изображать на форме имитацию сферы , куба  
3
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
07.09.2016, 12:11
neokrom
Это код для куба. Потом можно все объединить.

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 i As Single
 
Private Sub Command1_Click()
    Const a = 70.71
    Const b = 200
    Pic1.Scale (-50, 350)-(350, -50)
    Pic1.DrawWidth = 3
    Pic1.Line (0, 0)-(b, b), , B
    Pic1.Line (0, b)-(a, b + a)
    Pic1.Line (b, 0)-(b + a, a)
    Pic1.Line (b, b)-(b + a, b + a)
    Pic1.Line (a, b + a)-(b + a, b + a)
    Pic1.Line (b + a, a)-(b + a, b + a)
    
    Pic1.DrawWidth = 1
 
    For i = 20 To 200 Step 20
        Pic1.Line (0, i)-(b, i)
    Next
 
    For i = 20 To 200 Step 20
        Pic1.Line (b, i)-(b + a, i + a)
    Next
 
    For i = 20 To 200 Step 20
        Pic1.Line (i, b)-(a + i, b + a)
    Next
End Sub
Миниатюры
Разработать приложение, позволяющее изображать на форме имитацию сферы , куба  
2
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
07.09.2016, 12:19
Лучший ответ Сообщение было отмечено echs как решение

Решение

https://www.cyberforum.ru/post5977909.html
3
0 / 0 / 0
Регистрация: 28.08.2016
Сообщений: 67
07.09.2016, 18:46  [ТС]
ну вроде не чего ..как ты это рисовал на программе?
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
08.09.2016, 09:20
neokrom
Давайте все по-порядку. Итак шар.
1. На форму поместил объект Picture1. Но присвоил ему имя Pic1.
(В VB , где свойства объектов, в самой верхней строке есть свойство
NAME. Там написано Picture1, а вы впишите свое имя, например Pic1)
2. дальше
Установил систему координат. Это код:
Visual Basic
1
Pic1.Scale (-200, 200)-(200, -200)
То есть оси системы координат находятся в центре.
Определил толщину линии: Pic1.DrawWidth = 3
3.
ТЕПЕРЬ САМОЕ ГЛАВНОЕ.
Если на обычном шаре нарисовать окружности, которые делят его
пополам и посмотреть со стороны то мы увидим эти окружности в
виде эллипсов. Наверняка вы видели глобус и меридианы на нем.
Так вот, чтобы придать нашему шару объем, нужно нарисовать несколько
эллипсов. Это удобно сделать в цикле и не рисовать каждый эллипс отдельно.
4. Эллипсы должны располагаться равномерно на интервале 0° - 90°
Но поскольку мы имеем дело и радианами, то интервал 0 - 1.5708
(конечно мы могли ввести и градусы, но зачем на лишний код)
Шаг я ввел равным 0.261 - я просто попробовал как будет смотреться
Вы можете изменить шаг. Если шаг сделать меньше, то линий будет больше.
(Это дело вкуса. Как вам нравится так и делайте)
Если вы обратили внимание, то рисовалось две серии Эллипсов
Visual Basic
1
2
Pic1.Circle (0, 0), R, , , , k 
Pic1.Circle (0, 0), R, , , , 1 / k
Тут первый эллипс рисуется сжатым к оси икс
А второй - сжатым к оси игрек
k - коэффициент сжатия (к оси икс)(k < 1)
1/k - будет сжимать к оси игрек (1/k > 1)
2
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
08.09.2016, 11:16
Это закрашенный эллипс. Ничего другого я не придумал.

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
Option Explicit
Dim x As Single, y As Single, y2 As Single
Dim R As Single, n As Single
Dim c1&, c2&, c3&, C&
 
Private Sub Command1_Click()
    R = 200
    Pic1.DrawWidth = 3
    Pic1.Scale (-R, R)-(R, -R)
    Pic1.Circle (0, 0), 150, , , , 0.7
    Do
        n = n + 1
        x = 300 * Rnd - 150
        y2 = 105 * Sqr(1 - (x / 150) ^ 2)
        y = y2 * Rnd
        c1 = 255 * Rnd
        c2 = 255 * Rnd
        c3 = 255 * Rnd
        C = RGB(c1, c2, c3)
        Pic1.PSet (x, y), C
        Pic1.PSet (x, -y), C
    Loop Until n > 5000
End Sub
Миниатюры
Разработать приложение, позволяющее изображать на форме имитацию сферы , куба  
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
08.09.2016, 14:07
neokrom
Куб было нарисовать много проще.
1. Была задана система координат так, чтобы самый нижний
левый угол куба оказался центром этой системы.
2. Вот от этого угла и были взяты координаты всех остальных
углов куба.
3. Итак. Первым был нарисован квадрат. Он такой всего один.
4. Еще 5 линий завершили куб
5. В программе есть три цикла. Каждый цикл проводит несколько
параллельных прямых. Толщина этих прямых равна 1. Чтобы было
похоже на штриховку.
6. В целом все
примечание
Чтобы не возится с числами, которые в большом количестве
повторяются, я ввел две константы.
2
0 / 0 / 0
Регистрация: 28.08.2016
Сообщений: 67
08.09.2016, 18:03  [ТС]
ок ..хорошо а в этом коде можешь помочь написать комментарий !?

Добавлено через 15 секунд
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Option Explicit
Dim WithEvents picDisp As PictureBox, _
    WithEvents hsbSize As HScrollBar, _
    WithEvents hsbZoom As HScrollBar, _
    WithEvents tmrTime As Timer, _
    WithEvents cboType As48span> ComboBox
 
Private Sub Form_Resize()
    On Error Resume Next
    If ScaleHeight <= 1000 Or ScaleWidth <= 2000 Then Exit Sub
    picDisp.Move 100, 100, ScaleWidth - 200, ScaleHeight - 1000
    hsbSize.Move 100, ScaleHeight - 800, ScaleWidth - 200
    hsbZoom.Move 100, ScaleHeight - 400, ScaleWidth - 2000
    cboType.Move ScaleWidth - 1800, ScaleHeight - 400, 1700
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
    On Error GoTo 1
    Cancel = 1: Set picDisp = Controls.Add("VB.PictureBox", "picDisp")
    Set hsbSize = Controls.Add("VB.HScrollBar", "hsbSize")
    Set hsbZoom = Controls.Add("VB.HScrollBar", "hsbZoom")
    Set tmrTime = Controls.Add("VB.Timer", "tmrTime")
    Set cboType = Controls.Add("VB.Combobox", "cboType")
    picDisp.ScaleMode = vbPixels: picDisp.FillStyle = vbSolid: picDisp.AutoRedraw = True
    hsbSize.Max = 100: hsbSize.Min = 0: hsbSize.Value = 50
    hsbZoom.Max = 100: hsbZoom.Min = 0: hsbZoom.Value = 50
    picDisp.Visible = True: hsbSize.Visible = True: hsbZoom.Visible = True
    tmrTime.Interval = 32
    cboType.AddItem "Сфера": cboType.AddItem "Куб": cboType.AddItem "Эллипс"
    cboType.ListIndex = 1: cboType.Visible = True: Form_Resize
    Exit Sub
1
End Sub
 
Private Sub tmrTime_Timer()
    Static ph As Single, cz As Single, x As Single, y As Single, d As Single, _
           p As Single, s As Long, l As Long, q As Single
           
    q = (hsbZoom.Value / 100)
    cz = Sin(ph) * q
    ph = ph + 0.03: picDisp.Cls
    s = IIf(ScaleWidth > ScaleHeight, picDisp.ScaleHeight / 4, picDisp.ScaleWidth / 4) * (hsbSize.Value / 100)
    s = s + s * cz: If s = 0 Then Exit Sub
    Select Case cboType.ListIndex
    Case 0
        picDisp.DrawStyle = 5
        d = 1.5707963267949 / s: p = 0: x = picDisp.ScaleWidth / 2: y = picDisp.ScaleHeight / 2
        For l = 0 To s - 1
            q = Exp(p - 1.5707963267949) * 255
            picDisp.FillColor = RGB(Sin(p) * 255, q, q)
            picDisp.Circle (x, y), s
            s = s - 1: p = p + d: x = x - 0.4: y = y - 0.4
        Next
    Case 1
        picDisp.DrawStyle = 0
        x = picDisp.ScaleWidth / 2 - s: y = Int(picDisp.ScaleHeight / 2 - s)
        picDisp.Line (x, y)-Step(s * 2, s * 2), &HA0A0FF, BF
        x = x + 1: y = y - 1: q = s / 2.5
        For l = 0 To q - 1
            picDisp.Line (x, y)-Step(s * 2, 0), &H323280
            picDisp.Line (Int(x + s * 2), y)-Step(0, s * 2), &H5252A0
            x = x + 1: y = y - 1
        Next
    Case Else
        picDisp.DrawStyle = 5
        x = picDisp.ScaleWidth / 2: y = picDisp.ScaleHeight / 2
        picDisp.FillColor = vbRed
        picDisp.Circle (x, y), s * 2, , , , 0.5
    End Select
End Sub
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
08.09.2016, 18:42
neokrom
Вы понимаете, я не знаю алгоритма этого кода.
Поэтому я не смогу объяснить, что программа
делает. Увы, я не бог программирования...
1
0 / 0 / 0
Регистрация: 28.08.2016
Сообщений: 67
09.09.2016, 06:07  [ТС]
спасибо и на этом!

Добавлено через 6 часов 37 минут
Тут в общем нужно что б сфера, куб и элепс приближались и удолялись !
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
09.09.2016, 06:25
Цитата Сообщение от echs Посмотреть сообщение
я не знаю алгоритма этого кода.
Интересно, чем этот код для вас непонятен? Динамическим созданием контролов и динамической же настройкой среды?
Сам алгоритм рисования фигур- чистая математика, горячо вами любимая, ни чего необычного.
Переписать этот код в стиле "формошлёпства" не составит ни какого труда.
1
0 / 0 / 0
Регистрация: 28.08.2016
Сообщений: 67
09.09.2016, 16:24  [ТС]
это если хорошо понимаешь а если я далёк и пытаюсь вникнуть !мне понятно где прописать R-? В ПРОГРАММЕ САМОЙ ?
0
0 / 0 / 0
Регистрация: 28.08.2016
Сообщений: 67
24.09.2016, 17:52  [ТС]
а как сделать ..1) созданные на основе объектов HScrollBar и VScrollBar, позволяющие изменять размеры сферы, куба, эллипса;
2) управляющие автоматическим сжатием/увеличением сферы и куба (пульсирующие сфера и куб
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.09.2016, 17:52
Помогаю со студенческими работами здесь

1. Разработать VBA-приложение, позволяющее автоматически создавать сертификат
1. Разработать VBA-приложение, позволяющее автоматически создавать сертификат, удостоверяющий освоение программы профессионального модуля...

Разработать програмное приложение, позволяющее наблюдать вращение трехмерного объекта
Разработать програмное приложение, позволяющее наблюдать вращение трехмерного объекта. В качестве трехмерного объекта выбрать...

Разработать приложение, позволяющее добавлять и удалять фамилии студентов в список
Разработать приложение, позволяющее добавлять и удалять фамилии студентов в список, а также выводить в метку выбранные значения из трех...

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

Разработать приложение Windows Forms, позволяющее организовать телефонную книгу
Разработать приложение Windows Forms, позволяющее организовать телефонную книгу. Требования: 1. Данные должны сохраняться при закрытии...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru