Корабль срисовать: Как нарисовать корабль поэтапно карандашом

Как нарисовать корабль: поэтапно для детей

Есть идеи или пожелания?

Главная Статьи детям и родителям Рисование для детей Учимся рисовать поэтапно Как нарисовать корабль

Июль 14

Как нарисовать корабль — разберемся поэтапно за несколько шагов. Проявляйте креативность и развивайте творческое начало.

Kindbi

  • Как нарисовать человека
  • Как нарисовать хомяка
  • Как нарисовать футбольный мяч
  • Как нарисовать фрукты
  • Как нарисовать ухо
  • Как нарисовать утку
  • Как нарисовать утенка
  • Как нарисовать улыбку
  • Как нарисовать тюльпан
  • Как нарисовать трактор

Нашли ошибку? Ctrl+Enter

Популярное

Найди отличия

Ребусы

Пятнашки

Задачи со спичками

Пазлы

Судоку

Раскраски

Python 002 — Нарисуй корабль

Хорошо, давайте сами отправимся сюда и посмотрим, как нарисовать корабль. Поскольку я новичок в Python, это повлечет за собой изучение того, как создать список или массив или одну из этих вещей.

В Котлине корабль определялся так:

 частное значение shipPoints = listOf(
    Вектор2(-3.0, -2.0), Вектор2(-3.0, 2.0), Вектор2(-5.0, 4.0),
    Вектор2(7.0, 0.0), Вектор2(-5.0, -4.0), Вектор2(-3.0, -2.0)
)
частный вал shipFlare = listOf(
    Вектор2(-3.0,-2.0), Вектор2(-7.0,0.0), Вектор2(-3.0, 2.0)
)
 

Я создам новый файл Python и сразу приступлю к нему. Я начинаю с этого много:

 класс Корабль():
    def __init__(я, позиция):
        самостоятельная позиция = позиция
        self.points = [вектор2 (-3,0, -2,0), вектор2 (-3,0, 2,0), вектор2 (-5,0, 4,0),
                       вектор2(7.0, 0.0), вектор2(-5.0,-4.0), вектор2(-3.0,-2.0)]
        self.flare = [вектор2 (-3,0, -2,0), вектор2 (-7,0, 0,0), вектор2 (-3,0, 2,0)]
 

Теперь то, что pygame имеет для моей цели рисования, выглядит как draw.lines , который принимает список точек. Думаю, я могу просто создать функцию

draw и рисовать прямо на экране. Но мне кажется, что это не совсем в духе. Я думаю, у нас должна быть поверхность, рисовать на ней, а затем выводить на экран в нужном месте.

Также я думаю, что мы действительно хотим, чтобы вещь была больше 14 пикселей, но мы будем беспокоиться об этом, когда мы вообще ее нарисуем. И мне нужно смещение точек, чтобы верхний левый угол был (0,0). Возьмем метод заполнения поверхности.

 класс Корабль():
    def __init__(я, позиция):
        самостоятельная позиция = позиция
        self.points = [вектор2 (-3,0, -2,0), вектор2 (-3,0, 2,0), вектор2 (-5,0, 4,0),
                       вектор2(7.0, 0.0), вектор2(-5.0,-4.0), вектор2(-3.0,-2.0)]
        self.flare = [вектор2 (-3,0, -2,0), вектор2 (-7,0, 0,0), вектор2 (-3,0, 2,0)]
        self.fill_surface ()
    деф fill_surface (я):
        форма = карта (лямбда-точка: точка + вектор2 (7,4), self.points)
 

Я лучше напишу тест для своей самой первой карты и лямбды.

 определение test_map_lambda (я):
        точки = [вектор2 (-3,0, -2,0), вектор2 (-3,0, 2,0), вектор2 (-5,0, 4,0),
                  вектор2(7.0, 0.0), вектор2(-5.0,-4.0), вектор2(-3.0,-2.0)]
        new_points = карта (лямбда-точка: точка + вектор2 (7,4), точки)
        для точки в new_points:
            self.assertGreaterEqual (точка.x, 0)
            self.assertLessEqual (точка.x, 14)
            self.assertGreaterEqual (точка.y, 0)
            self.assertLessEqual (точка.y, 9)
 

Это выполняется, и я распечатал результаты, чтобы быть уверенным. Они варьируются от 0 до 14 по x, от 0 до 8 по y. Я предполагаю, что это означает, что мне нужна поверхность размером 9 на 15 для рисования.

Или… Я мог бы для начала просто рисовать на экране, а потом думать о поверхности. Давайте сделаем это.

На самом деле давайте сразу же нанесем на карту и точки.

Я запутался с этим:

 pygame.draw.circle(экран, "красный", player_pos, 40)
    ship. draw(экран)
класс Корабль():
    def __init__(я, позиция):
        самостоятельная позиция = позиция
        self.raw_points = [вектор2 (-3,0, -2,0), вектор2 (-3,0, 2,0), вектор2 (-5,0, 4,0),
                      вектор2(7.0, 0.0), вектор2(-5.0,-4.0), вектор2(-3.0,-2.0)]
        self.raw_flare = [вектор2 (-3,0, -2,0), вектор2 (-7,0, 0,0), вектор2 (-3,0, 2,0)]
    настройка защиты (я, точка):
        точка возврата + vector2(7, 4) + self.position
    def draw(я, экран):
        ship_points = карта (self.adjust, self.raw_points)
        pygame.draw.lines(экран, "белый", False, ship_points)
 

Программа не сообщает:

 Traceback (последний последний вызов):
  Файл "/Users/ron/PycharmProjects/firstGo/main.py", строка 27, в 
ship.draw(экран) Файл "/Users/ron/PycharmProjects/firstGo/ship.py", строка 18, в розыгрыше pygame.draw.lines(экран, "белый", False, ship_points) TypeError: аргумент точек должен быть последовательностью пар чисел

Я думаю, что map возвращает итератор, а не список. Я делаю это:

 def draw(я, экран):
        ship_points = список (карта (self.adjust, self.raw_points))
        pygame.draw.lines(экран, "белый", False, ship_points)
 

Спасибо, переполнение стека. Это рисует и работает примерно так же хорошо, как и можно было ожидать.

У нас есть крошечный корабль, в этом нет ничего удивительного, и его верхний левый угол действительно находится примерно в центре круга. Все идет нормально. Наши тесты зеленые, поэтому мы зафиксируем это на том основании, что это прогресс. Коммит:

рисует крошечный корабль почти в центре экрана.

Этого может быть достаточно, чтобы удовлетворить меня, так как эти несколько строк кода, учитывая, что это первые строки Python, которые я действительно написал, заняли около часа моего времени. Давайте задумаемся.

Отражение

Я узнал, что map возвращает итератор и что итератор не является списком , даже если он является итератором в списке . Я не совсем в этом разбираюсь, поэтому немного почитаю о коллекциях Python.

Тем не менее, я научился настраивать свой список точек в другом месте, и я, безусловно, мог бы настроить его в любом месте на экране, составляя карту на лету. Но это кажется несколько затратным. Конечно, мы можем сделать лучше. Несмотря на то, что наш корабль представляет собой набор линий, я думаю, нам следует раз и навсегда нарисовать его на поверхности, а затем отобразить.

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

Еще немного возни и получаю:

 класс Корабль():
    def __init__(я, позиция):
        самостоятельная позиция = позиция
        self.raw_points = [вектор2 (-3,0, -2,0), вектор2 (-3,0, 2,0), вектор2 (-5,0, 4,0),
                           вектор2(7.0, 0.0), вектор2(-5.0,-4.0), вектор2(-3.0,-2.0)]
        self.raw_flare = [вектор2 (-3,0, -2,0), вектор2 (-7,0, 0,0), вектор2 (-3,0, 2,0)]
        self.surface = pygame.Surface((15, 9))
        self. paint(self.surface)
    настройка защиты (я, точка):
        точка возврата + вектор2(7, 4)
    def draw(я, экран):
        screen.blit(self.surface, self.position)
    деф краска(я, поверхность):
        ship_points = список (карта (self.adjust, self.raw_points))
        pygame.draw.lines (поверхность, «белый», False, ship_points)
 

Мы создаем нашу поверхность только один раз и раскрашиваем ее во время инициализации. Мы перебрасываем его на позицию корабля в розыгрыше. Это почти работает:

Фон корабля черный, что со временем будет в самый раз. Есть способ определить прозрачность на поверхности, и я хотел бы знать, что это такое, но пока это не важно. Наблюдая за действительно интересной программой Брайана, кажется, что прозрачность не так удобна, как могла бы быть. Я могу никогда не узнать, учитывая то, что я планирую в данный момент.

Давайте сделаем еще одну вещь. Давайте сделаем корабль в четыре раза больше, чем сейчас.

 по определению __init__(я, позиция):
        самостоятельная позиция = позиция
        self. raw_points = [вектор2 (-3,0, -2,0), вектор2 (-3,0, 2,0), вектор2 (-5,0, 4,0),
                           вектор2(7.0, 0.0), вектор2(-5.0,-4.0), вектор2(-3.0,-2.0)]
        self.raw_flare = [вектор2 (-3,0, -2,0), вектор2 (-7,0, 0,0), вектор2 (-3,0, 2,0)]
        self.surface = pygame.Surface((60, 36))
        self.paint(self.surface)
    настройка защиты (я, точка):
        точка возврата*4 + вектор2(28, 16)
 

Отлично! Ну, так сказать. Коммит: Большой корабль на черном через блит.

Резюме

Хорошо, это было неровно, но неплохо для моего первого раза, когда я в гневе набирал Python. И я даже не разозлился. Здесь. Чему мы научились?

Мы немного разобрались в создании экрана, в рисовании линий на отдельной поверхности и в переносе этой поверхности на экран. Мы не занимались позиционированием корабля так, чтобы он центрировался вокруг своей позиции, но это должно быть вопросом добавления где-то константы. И нам нужно придать ему более толстые линии, что мы можем сделать либо путем рисования более толстыми линиями, либо путем масштабирования поверхности после того, как мы ее построим. Мы попробуем оба способа.

Мое первое мнение о PyGame заключается в том, что это скорее олдскульная, рудиментарная программа по сравнению с тем, что существует в наши дни. Не знаю, есть ли что-то лучше, но я посмотрю вокруг.

Мы уже в пути. Думаю, мы продолжим работать над этой программой, рассматривая ее как всплеск, пока лучше не разберемся с основами Python и PyGame. Прямо сейчас мое основное внимание будет сосредоточено на создании отбивных на обоих.

Сегодня хороший день. Не лучший день для смерти, заметьте, но хороший день.

Как нарисовать парусник на ваших фэнтезийных картах — эффекты карты

Учебник

Автор Джош Столарц

Нарисовать корабль, плывущий по морям ваших фэнтезийных карт, — отличный способ передать немного культуры вашего сеттинга. Вы также можете использовать их для обозначения торговых путей и если город является крупным портом в регионе. В этом уроке я покажу вам, как нарисовать простую деревянную парусную лодку, которую вы можете использовать на своих фэнтезийных картах городов.

Все кисти, которые я буду использовать в этом уроке, доступны в наборе основных кистей Map Maker для Procreate и Photoshop.

Нарисуйте прямоугольник для размера

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

Нарисуйте форму лодки

Теперь, когда вы знаете, насколько большой будет ваша лодка, вы можете использовать прямоугольник в качестве ориентира. Создайте новый слой, чтобы нарисовать свою лодку, и уменьшите непрозрачность прямоугольника. Затем вы можете нарисовать две дуги и соединить их сзади.

Пытаетесь удержать стороны на одном уровне?

Если вы работаете в цифровом формате, вы можете просто нарисовать одну сторону лодки, продублировать слой и отразить его. Затем вы можете просто переместить его на место на противоположной стороне.

Нарисуйте внутренние скамейки и пол

Добавьте пару скамеек в середине лодки и, возможно, одну сзади. Теперь вы можете нарисовать несколько вертикальных линий по всей длине лодки, чтобы обозначить деревянный пол.

Изогнутые или прямые линии?

Но разве линии не должны изгибаться по контуру лодки? Это зависит от того, какую лодку вы хотите нарисовать. Для этой лодки мы представим, что полы были установлены, чтобы обеспечить плоскую поверхность для ходьбы. Но каноэ — хороший пример лодки, в которой обычно не установлена ​​палуба, а борта имеют больше изгибов по краям.

Дополнительные уроки, которые могут вам понравиться

Как нарисовать водяную мельницу

Как рисовать леса — перспектива сверху вниз

Как нарисовать городской квартал

Как заштриховать океаны и моря на ваших картах

Нарисуйте мачту

Создайте новый слой и нарисуйте два круга около середины лодки, чтобы сформировать лонжерон или вертикальную стойку, поддерживающую мачту. Затем нарисуйте прямоугольник перед ним, где будет мачта. Приятно поместить его под небольшим углом, чтобы придать визуальный интерес и асимметрию.

Добавьте парус лодки

Теперь вы можете нарисовать дугу перед прямоугольником, который вы только что нарисовали, чтобы сформировать парус. Вы можете назвать его хорошим только этим, но для этого примера я решил добавить изогнутую часть ниже, чтобы придать парусу большую глубину.

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

Завершите детали для паруса и дерева

Нарисуйте несколько веревок вдоль горизонтальной балки мачты, чтобы показать, где будет привязан парус. Вы также можете добавить несколько небольших дуг на парусе между каждой из них, чтобы показать, что ткань выдувается и выталкивается из мачты. Наконец, вы можете нарисовать простые штриховки, чтобы добавить немного больше характера и деталей. Я решил опустить весь такелаж, так как эта лодка будет казаться довольно маленькой на чем-то вроде карты города. Он просто кажется намного больше здесь для учебника.

Нарисуйте текстуру дерева и используйте легкие ломаные линии, чтобы добавить текстуру. Как правило, линии повторяют структуру доски, но не бойтесь добавлять изгибы или сучки в древесину.

Блок в базовых цветах

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

Используйте Alpha Lock для раскрашивания штрихового рисунка

Еще одна важная вещь, на которую следует обратить внимание, это перекрасить сам штриховой рисунок, чтобы он выглядел более безупречным и профессиональным. В большинстве приложений для цифрового рисования, таких как Procreate или Photoshop, вы можете использовать инструмент под названием «Alpha Lock». Это позволяет вам раскрашивать штриховой рисунок только простым движением большой кисти.

Конструктор карт города

34 $ | Для Procreate, Photoshop, Clip Studio Paint и Affinity

Хотите создать собственную карту города, нарисованную от руки, всего за несколько кликов и немного воображения? С помощью City Map Builder вы получите более 300 функций, включая водяное колесо в этом руководстве, а также кисти, которые есть у меня повсюду. Нажмите на кнопку ниже, чтобы проверить это!

Краска в тени

Создайте новый слой поверх одного из цветных слоев, созданных на предыдущем шаге. Затем выберите «Обтравочную маску» для этого слоя. Вы должны увидеть на слое какую-то стрелку, указывающую вниз. Теперь вы можете рисовать цветом только фигуру, которая находится ниже этого слоя.

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

Какую кисть я использую?

Я использую Old Sponge Filler из набора основных кистей Modern Map Maker, чтобы придать штриховке текстуру и сделать ее более естественной.

НАЖМИТЕ ЗДЕСЬ, чтобы узнать больше о моих основных кистях Modern Map Maker для Procreate и Photoshop

Нарисуйте блики

Когда все тени на месте, вы можете добавить блики, используя тот же метод, что и в предыдущем шаге. Создайте новый слой с режимом наложения «Экран» над слоем с тенью. Затем вы можете нарисовать несколько бликов в любом месте, где ваш источник света будет падать на лодку.

Добавление бликов на воду

И последнее, но не менее важное: вы можете добавить несколько простых бликов на воду, чтобы она выглядела движущейся, и парусник чувствовал себя частью окружающей среды. На новом слое над фоном, но под лодкой выберите цвет паруса и установите режим наложения слоя на «экран». Используйте большую кисть с низкой непрозрачностью, чтобы нарисовать зубчатые или набросанные штрихи. Представьте себе небольшие волны, вытекающие из лодки и рассекающие воду.

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

Готово! Помните, что уровень детализации вашего парусника будет зависеть от масштаба, в котором он отображается на вашей карте.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *