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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

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

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

Результаты опроса: Знаете ли вы другой способ рисования правильных многоугольников?
Да. 1 20.00%
Нет. 4 80.00%
Голосовавшие: 5. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2011, 14:14   #11
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Плотное покрытие

Тема, при моральной поддержке форума, получила дальнейшее развитие.
Код:
Sub DrawParquetry() ' Макрос записан 27.07.2011 и позволяет замостить всё поле (по F5)
Const RoX = 5, RoY = 5   'масштабы по осям
Static ShiftX, ShiftY    'сдвиг начала "косички" от начала координат (в пунктах)
Dim Nn  As Long: Nn = 18 'количество паркетин
Dim n As Long            'индекс узла
Nn = Nn * 3              'количество узловых точек в одной косичке

ReDim x(0 To Nn) As Single: ReDim y(0 To Nn) As Single

x(0) = ShiftX: y(0) = ShiftY

With ActiveDocument.Shapes.BuildFreeform(msoEditingAuto, x(0), y(0))

    For n = 1 To Nn
    x(n) = ShiftX + ((n Mod 6) \ 2 + ((n Mod 6) \ 4) + n \ 6) * RoX
    y(n) = ShiftY + (((n + 3) \ 2) Mod 3 + (n - 1) \ 6) * RoY
    .AddNodes msoSegmentLine, msoEditingAuto, x(n), y(n)
    Next n
        
    .ConvertToShape.Select 'построение ломаной по найденным узлам
    
End With

ShiftX = ShiftX + 4 * RoX 'сдвиг "косички" вправо при следующем запуске (до выхода из Word)
End Sub
Также назрел вариант мощения под любым углом (в полярных координатах).

(А тем временем в замке Эксселя 7vlad37 уже вовсю передвигает объём!)
Изображения
Тип файла: png Platz.png (34.8 Кб, 176 просмотров)

Последний раз редактировалось Sasha_Smirnov; 28.07.2011 в 14:35. Причина: новости.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 31.08.2011, 15:08   #12
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Эйфелева пицца

В посте http://programmersforum.ru/showthread.php?t=72695#9 приложен раскидай.doc и в нём (по альт-F8) макрос spiderly, который тоже рисует нечто.
Изображения
Тип файла: jpg 49.jpg (71.0 Кб, 129 просмотров)

Последний раз редактировалось Sasha_Smirnov; 01.09.2011 в 14:53. Причина: цвет.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 02.09.2011, 12:37   #13
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Циклы и код кракена

Код пока не выкладываю.

Оказывается, это было возможно ещё на заре Перестройки: http://programmersforum.ru/showthread.php?t=164491#10, в 1985-м, но до сих пор я был занят чем-то другим.

Изображения
Тип файла: png 5-60_born_02.09.2011.png (9.4 Кб, 143 просмотров)
Тип файла: jpg 17-29_born_02.09.2011.jpg (51.2 Кб, 127 просмотров)

Последний раз редактировалось Sasha_Smirnov; 03.09.2011 в 12:36. Причина: образцы работы программы.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 22.10.2011, 23:59   #14
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Пьяный рыцарь

Код:
Sub DrawClodOfMeanders()        ' Макрос записан 23.10.2011 User
Const pi = 3.1415926535898
Const k = 5, n = 30             'порядок симметрии вращения (k) и число узлов в завитках (n)
Const RoX = 7, RoY = 7, RoXp = 8, RoYp = 8, ShiftX = 300, ShiftY = 200
Dim hor As Long, ver As Long    'промежуточные параметры меандров (одного завитка)
Dim Nn As Long, Nk As Long, fi As Double
Dim x As Double, y As Double, x1 As Double, y1 As Double

ReDim xd(0 To n) As Long: ReDim yd(0 To n) As Long
ReDim xp(0 To k) As Long: ReDim yp(0 To k) As Long

    xd(0) = ShiftX:         yd(0) = ShiftY

For Nn = 1 To n
    hor = ((Nn + 1) Mod 10) \ 2:    ver = (Nn Mod 10 + 2) \ 2 - 3
    xd(Nn) = RoX * 0.5 * (5 + (5 - 2 * hor) * (-1) ^ (((Nn + 1) Mod 10) \ 4) + ((Nn - 1) \ 10) * 10)
    yd(Nn) = RoY * ver * (-1) ^ ver + 2
Next Nn

    xp(0) = RoXp + ShiftX:  yp(0) = ShiftY

With ActiveDocument.Shapes.BuildFreeform(msoEditingAuto, xp(0), yp(0))
    For Nk = 1 To k
        xp(Nk) = RoXp * Cos(Nk * 2 * pi / k) + ShiftX: yp(Nk) = RoYp * Sin(Nk * 2 * pi / k) + ShiftY
        
        For Nn = n To 9 Step -1
            fi = 2 * pi * (Nk + 1) / k
            x = xd(Nn) * Sin(fi) + yd(Nn) * Cos(fi)
            y = -xd(Nn) * Cos(fi) + yd(Nn) * Sin(fi)
            If x1 = 0 Then: x1 = x + xp(1): y1 = y + yp(1)  'замыкающий узел контура
            .AddNodes msoSegmentLine, msoEditingAuto, x + xp(Nk), y + yp(Nk)
        Next Nn
        
    Next Nk
    .AddNodes msoSegmentLine, msoEditingAuto, x1, y1
    .ConvertToShape.Select 'соединение узловых точек в контур
End With

With Selection.ShapeRange.Fill
    .Parent.Nodes.Delete 1             'удаление узла № 1 (стартового)
    .Visible = msoTrue                 'видимость заливки (видна)
    .Solid                             'характер заливки (сплошная)
    .ForeColor.RGB = RGB(255, 0, 255)  'заливка контура (цвет по RGB)
End With
ThisDocument.UndoClear                 'очистка списка возвратов (что по CTRL-Z)
End Sub
Уж не знаю, будет ли он рисовать в Corel Draw, но в ворде легко.

«Пьяного рыцаря» (как на рисунке) можно получить, если сделать Step –2 при n = 29.
Изображения
Тип файла: jpg TipsyKnight.jpg (21.6 Кб, 129 просмотров)

Последний раз редактировалось Sasha_Smirnov; 23.10.2011 в 05:02.
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
описание комплексного числа!!! Medik07 Помощь студентам 0 02.11.2009 22:21
Как вычислит корень из числа? Paul_AG Общие вопросы C/C++ 6 04.04.2009 14:47
Изобразить на экране правильный многоугольник, стороны которого окрашены в разные цвета, совершающий внут Sashka Помощь студентам 3 31.01.2008 12:02
как найти корень из числа $Дмитрий Общие вопросы Delphi 7 26.04.2007 13:40