Путь разработчика    

Нарисуйте простой робот в C#


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

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

Предположим, что три сегмента плеча имеют длины L1, L2 и L3, а углы поворота на трех стыках - A1, A2 и A3.

Первый шарнир поворачивает рычаг на угол A1 на фиксированном плече. Второе соединение переведено на расстояние L1 в направлении первого сегмента руки.

Второй шарнир поворачивает рычаг на угол A2 на «локте». Третий шарнир сдвинут расстояние L2 в направлении второго сегмента руки.

Третий шарнир поворачивает рычаг на угол A3 на «запястье». Конец рычага переведен на расстояние L3 в направлении третьего сегмента руки.

Эта программа использует следующий код для рисования руки робота.

Python

Код начинается с некоторой инициализации, а затем переводит центр координат в середину PictureBox.

Программа должна нарисовать суставы (плечо, локоть и запястье) сверху рук, поэтому метод тянет руку в два этапа. Сначала он рисует руки, а затем натягивает суставы сверху. Он использует один и тот же набор преобразований для каждого.

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

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

Затем код должен перейти в положение локтевого сустава. Для этого он добавляет перевод расстояния L1 в направлении X и 0 в направлении Y. Поскольку за этим следует предыдущее вращение, этот перевод происходит в направлении, которое указывает первый сегмент первого плеча. Это ставит начало рисунка в месте локтя. Рисунок переведен, повернут и переведен снова, поэтому он попадает в правильное положение.

Снова представим руку в мировом координатном пространстве и предположим, что вы рисуете локоть в начале координат. Новый перевод перемещает соединение в (L1, 0). Вращение угла A1 вращает сустав в соответствии с вращением первого сегмента плеча. Наконец, перевод плеча перемещает все это, поэтому основание первого сегмента руки центрируется в области рисования.

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

После того, как нарисованы все сегменты руки, код сбрасывает преобразование в исходное, которое центрирует плечо на PictureBox. Затем он снова проходит преобразования, на этот раз рисуя суставы.

Источник: http://csharphelper.com/blog/2016/06/draw-a-simple-robot-arm-in-c/



Отзывы (через Facebook):

Оставить отзыв с помощью аккаунта FaceBook:

Программирование Python Socket

Программирование сокетов - одна из самых фундаментальных технологий программирования компьютерной сети . Сокет является конечной точкой двусторонней линии...

18 11 2019 6:22:40

Базовые типы данных Java

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

17 11 2019 13:57:16

Использование элементов управления Windows Forms, чтобы сделать расширитель в C#

WPF, Silverlight, Metro или все, что Microsoft называет этим материалом, теперь дни имеют несколько полезных элементов управления в пространстве имен Syste...

16 11 2019 7:45:54

Выполнение бинарного усиления контраста на изображении в C#

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

15 11 2019 9:24:48

Метод Substring() в Java

Подстрока является частью строки. Метод String substring() Java String возвращает новый строковый объект из данной строки. Синтаксис String str = "Java Str...

14 11 2019 18:53:29

Отображение масштабируемой карты с горячими точками в C#

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

13 11 2019 21:36:24

Являются ли полиморфизм, перегрузка и переопределение аналогичных понятий?

Перегрузка - это действие определения нескольких методов с тем же именем, но с разными параметрами. Переопределяющее средство переопределяет тело метода су...

12 11 2019 14:54:15

Как загрузить CSV-файл в Excel в C#

Загрузка CSV-файла (файла значений с разделителями-запятыми) в Excel не слишком сложна, если вы знаете трюки. Используя те же трюки, вы можете загрузить фа...

11 11 2019 16:11:23

Строки в JavaScript

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

10 11 2019 23:58:46

Отображение местного времени и GMT в C#

В этом примере используется Timer для выполнения следующего кода каждые полсекунды. Вначале используется DateTime.Now для получения текущей даты и времени....

09 11 2019 19:55:40

Получаем размер шрифта в пикселях в C#

Одна странность класса Font заключается в том, что его свойство « Размер» возвращает размер шрифта в единицах, которые использовались для создания шрифта. С...

08 11 2019 15:30:54

Использование методов расширения строк для проверки номеров социального обеспечения в C#

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

07 11 2019 8:59:26

Что такое перечисления Java и почему они полезны?

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

06 11 2019 19:20:48

Что такое JVM и является ли она независимой от платформы?

Java Virtual Machine (JVM) - это спецификация, предоставляющая среду выполнения, в которой может быть запущен Java-байт-код (файлы .class). JVM - платформа...

05 11 2019 0:16:50

Set (набор) в Python

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

04 11 2019 6:14:22

Пиксельные части изображения в C#

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

03 11 2019 16:47:27

Сложение, вычитание, умножение, деление, модуль в Bash

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

02 11 2019 4:18:17

Как использовать * args и ** kwargs в Python

Параметр с ** (двойной звездой) и * (звезда) позволяет определять функции для принятия и для пользователей передавать любое количество аргументов, position...

01 11 2019 21:49:29

Преобразование массива байтов в целое число и обратно в C#

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

31 10 2019 12:26:24

Функции в JavaScript

Функции - это «автономные» модули кода, которые выполняют определенную задачу. Он содержит инструкции, используемые для создания вывода с его ввода. Чтобы...

30 10 2019 9:45:56

Программирование Java для начинающих

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

29 10 2019 2:56:22

Программа Hello World в C#

В этой статье мы узнаем несколько версий программы Hello World на C#. Пример: 1 Обсуждение кода: Каждый Основной метод должен содержаться внутри класса (в...

28 10 2019 10:14:29

Увеличьте и прокрутите изображение, нарисованное на C#

Эта программа позволяет масштабировать и прокручивать изображение, нарисованное программой. Программа содержит Panel с AutoScale, установленным в true. Вну...

27 10 2019 19:17:37

Оператор Java break и continue

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

26 10 2019 1:49:35

Delphi 6. Учебный курс (В. В. Фаронов)

В книге "Delphi 6. Учебный курс" даются начальные сведения по системе программирования Delphi, разработанной американской корпорацией Borland International...

25 10 2019 15:12:11

Выбор языка программирования: 6 пунктов при выборе своего языка

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

24 10 2019 7:22:21

События JavaScript DOM

События - это определенные действия, выполняемые конечным пользователем или самим веб-браузером. Он может запускаться в любой части документа, независимо о...

23 10 2019 7:46:26

Методы расширения для генерации случайных чисел двойной дочности в C#

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

22 10 2019 11:31:46

Как отобразить содержимое XML файла в Unity 5

В сегодняшнем уроке мы разберем как отобразить содержимое XML файла в Unity 5 и заполнить им класс персонажа. Для этого мы воспользуемся System.Xml...

21 10 2019 9:59:52

Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript и CSS (Р. Никсон)

Научитесь создавать современные динамические веб-сайты, даже если у вас нет опыта в программировании. Если вы умеете писать статические сайты на HTML, то с...

20 10 2019 23:12:13

Найдите дни, часы, минуты или секунды между двумя датами в C#

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

19 10 2019 23:21:40

Безопасное управление документами на C#

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

18 10 2019 14:18:26

Сделать меню во время выполнения для приложения WPF в C#

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

17 10 2019 6:10:42

Как найти свой IP-адрес и имя компьютера в Java

Класс InetAddress можно использовать для поиска доменных имен (DNS). Имя хоста может быть либо именем машины, например «mail.yahoo.com», либо текстовым пре...

16 10 2019 8:39:54

Какое использование лямбда в Python?

Лямбда, 11-я буква греческого алфавита, является символом длины волны. Лямбда исходит из исчисления Лямбды и относится к анонимным функциям программировани...

15 10 2019 22:13:38

Данные графика со стандартными диапазонами отклонения в C#

Примеры Нарисуйте нормальную кривую распределения в C# и Нарисуйте масштабированное нормальное распределение на C# , покажите один подход для визуализации...

14 10 2019 19:18:22

Каковы недостатки использования InnerHTML в JavaScript?

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

13 10 2019 1:38:51

Вызов общедоступных методов, используя их имена в C#

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

12 10 2019 6:40:53

Как удалить контекстное меню элемента управления TextBox в C#

Обычно элемент управления TextBox имеет контекстное меню, которое появляется при щелчке правой кнопкой мыши по нему, но что, если вы не хотите этого контек...

11 10 2019 5:32:28

Разница между system.gc() и runtime.gc() в Java

Типичный алгоритм сбора мусора (GC) в Java идентифицирует мусор, перемещая все ненужные объекты в куче и предполагая, что любой объект, который не был посе...

10 10 2019 11:49:56

Посмотрите, заблокирован ли файл на C#

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

09 10 2019 5:11:52

Как добавить файл в Python?

Режимы доступа определяют тип операций, доступных в открытом файле. Это относится к тому, как файл будет использоваться после его открытия. Чтобы добавить...

08 10 2019 2:54:27

Список окон рабочего стола на C#

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

07 10 2019 22:38:26

Является ли Monkey patching хорошей практикой программирования?

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

06 10 2019 9:39:15

Найти имя компьютера - Python

Существует несколько способов найти имя компьютера на Python. Модуль «socket» в Python обеспечивает доступ к интерфейсу сокетов BSD . Он доступен для всех...

05 10 2019 14:37:28


Parse error: syntax error, unexpected ',' in /home/users/9/9161484547/domains/flash-mx.ru/lessons/926.php on line 69