Поворот фигуры на 45 градусов. Что называется углом поворота

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

Инструкция

В современной физике угол поворота, как физическая величина, оценивается в единицах плоского угла. С целью определения значения плоского угла? используют уравнения, принятые в математике. В данном контексте можно применить один из двух ниже приведенных вариантов.Первый способ: ? = s/RЗдесь s обозначает длину дуги окружности, а R – длину радиуса окружности.

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

Второй способ – воспользоваться уравнением обратной тригонометрической функции, которое выглядит следующим образом: ? = arctg (a/b), где b и a есть не что иное как соответствующие длины катетов прямоугольного треугольника.

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

Как уже упоминалось, поперечное пружинное соединение представляет собой цилиндрический подшипник для вращательных движений с ограниченным углом поворота. Жесткость против сил, действующих в радиальном и осевом направлениях, относительно высока. Крутильная жесткость 10 различных размеров может быть выбрана тремя толщинами пружины в соответствии с углами поворота ± 15 °, ± 7, 5 ° и ± 3, 7 °. Подробная информация о доступных сериях приведена в соответствующем обзоре.

Снова и снова возникают раздражения относительно угла поворота. Если в прошлом номинальный угол поворота был обозначен как 30 °, 15 ° и 7, 5 °, теперь он обозначается как 15 °, 7, 5 ° и 3, 7 °. Геометрия и пружины не изменились, только по определению. Если раньше вы шли от максимально возможного угла поворота, то сегодня речь идет скорее о угле бесконечной продолжительности жизни.

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

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

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

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


Внимание, только СЕГОДНЯ!

Все интересное

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

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

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

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

Слово «угол» имеет различные толкования. В геометрии угол – это часть плоскости, ограниченная двумя лучами, выходящими из одной точки – вершины. Когда речь идет о прямых, острых, развернутых углах, то подразумеваются именно…

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

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

Затем соединение строится таким образом, что радиальные силы усиливают пружины в направлении вытягивания, так что уменьшается постоянная пружины. Рисунок 4: Постоянная пружины в зависимости от радиальной нагрузки. Использование крестообразных соединений в этом диапазоне нагрузок не рекомендуется, так как листовые рессоры могут изгибаться.

Для описания движения тел по сложной траектории, в том числе по окружности, в кинематике используются понятия угловая скорость, угловое ускорение. Ускорение характеризует изменение угловой скорости тела во времени. В многочисленных кинематических…

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

Горизонтальная нагрузка также изменяет постоянную пружины таким образом, чтобы кривые на рисунке 4 двигались вниз влево. Соединения с обозначением 10 оснащены самыми тонкими пружинами и, следовательно, имеют наименьшую постоянную пружину одного размера. Соединения с обозначением 20 имеют среднюю пружину и, следовательно, более высокую постоянную пружину, а соединения с обозначением 30 оснащены самыми сильными пружинами, и каждая из них имеет самую высокую постоянную пружину одного размера.

Постоянная пружины остается почти постоянной по всему круговому движению . Конфигурация втулки не влияет на постоянную пружины. Обычно постоянная пружины дается с допуском 10%. Линейность обусловлена ​​геометрией поперечно-пружинного соединения. Абсолютно линейное соединение должно было бы полностью линейно увеличить крутящий момент над углом поворота. На практике нелинейное поведение показано только при углах вращения больше номинального угла поворота.

ОПРЕДЕЛЕНИЕ ПРОГИБА И УГЛА ПОВОРОТА СЕЧЕНИЯ ДВУХОПОРНОЙ БАЛКИ ПРИ ПРЯМОМ ИЗГИБЕ

Цель работы: определить опытным путем величину прогиба и угол поворота сечения балки и сравнить их с величинами полученными путем теоретических расчетов.

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Под действием внешних сил балка деформируется таким образом, что её продольная ось искривляется. Изогнутую ось балки называют упругой линией. Перемещение поперечных сече­ний балок при изгибе характеризуется двумя величинами: прогибом Y и углом поворота .

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

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

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

Схема 1. Балка на двух опорах, загруженная сосредоточенной силой посередине продета в т.С.

Прогиб в точке т.С

Углы поворота на опорах в точках А и В

Он составляет порядка нескольких на одну тысячу предыдущих поворотов. Типичные измеренные значения показаны на следующих рисунках 9-9. Рисунок 9 Кривые гистерезиса для поперечных соединений с номинальным углом поворота ± 3, 7 ° Рисунок 11 Кривые гистерезиса для поперечных соединений с номинальным углом поворота ± 15 ° Рисунок 10 Гистерезисные кривые для поперечных соединений с номинальным углом поворота ± 7, 5 °.

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

Схема 2. Балка на двух опорах, загруженная двумя сосредоточенными силами.

Прогиб в точке С или D

Угол поворота на опорах

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

Монтаж с установочным штифтом в радиальном расположении

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

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

Прогиб на конце консоли

Прогиб в середине пролета

Угол поворота в точке А

Монтаж с установочным штифтом в поперечном и осевом направлениях

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

Рис.15. Схемы нагружения балок

Угол поворота на опоре в т.А

;

Принятые условные обозначения в формулах:

Y- прогиб (перемещение центра тяжести поперечного сечения в направлении, перпендикулярном к оси балки);

Квадратная сетка и треугольная сетка. Аффинное отображение применяется к этой сетке. Экранная сетка и сетка отображаются наложенными. Небольшой перевод приводит к тени. Появится небольшое вращение. Мы вводим прототип сетки и сетки параллельно, вертикальные плоскости. Если мы посмотрим на это с определенного расстояния, мы узнаем новый образец в результате перспективы. На следующих рисунках мы в четыре раза больше расстояния между двумя плоскостями перед передней плоскостью. Соответствующие фронтальные точки.

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

Р - сила, приложенная к балке;

l - длина балки;

E - модуль упругости 1-го рода;

I - осевой момент инерции поперечного сечения балки относительно нейтральной оси.

Оборудование и образцы

При исследовании изгиба двухопорной балки используется установка СМ-4А.

Балка прямоугольного сечения (6  40) мм установлена на двух шарнирных опорах.

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

Вращение с малым растяжением. Непосредственно с коэффициентом растяжения. Аналоговый эффект получается путем поворота треугольной сетки на 30 ° вокруг точки сетки. В случае растяжения вокруг, т.е. около 1%, существуют точные наложения вне центра - где они?

Подвижная стойка позволяет регулировать длину пролета от 700 до 1000 мм, а также получить консольную балку.

Измерение прогибов и углов поворота опорных сечений образца производится с помощью индикаторов часового типа с ценой деления О,01 мм. Индикаторы для измерения прогибов закреплены на индикаторных стойках, которые могут перемещаться вдоль основания установки по направляющей. Фиксация стойки к направляющей осуществляется с помощью стопора. Углы поворотов измеряются с помощью рычагов, прикрепленных к балке, индикаторами, которые воспринимают перемещение рычагов.

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

Мы все знаем прямоугольный треугольник с длиной катетера и длиной гипотенузы. Такие специальные прямоугольные треугольники с целыми длинами катетеров и целыми длинами гипотенузы называются пифагорейскими треугольниками. Однако наш угол поворота - это угол этого треугольника с длиной катетера и длиной гипотенузы. Фактически, мы можем поместить такой треугольник в нашу сетку.

ПОРЯДОК ПРОВЕДЕНИЯ ИСПЫТАНИЙ

Так как углы поворота сечения при упругих деформациях малы, то примем

, тогда

или

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

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

где S - отсчет показания индикатора, мм;

а - длина рычага измеренная от нейтрального слоя образца до оси шпинделя индикатора, мм (а=150мм);

 - угол поворота сечения, рад.

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

    Результаты испытаний занести в таблицу.

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

    Определить погрешность теоретических вычислений по формулам.



СОСТАВЛЕНИЕ ОТЧЕТА

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

КОНТРОЛЬНЫЕ ВОПРОСЫ

    Что называется упругой линией балки?

    В чем заключаются деформации балок при изгибе?

    Вычислять максимальные прогибы балок для схем 1, 2, 3.

    Для этих же схем балок вычислить углы поворота на опорах.

    Во сколько раз изменится прогиб балки, если нагрузку умень­шить вдвое?

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

    С какой точностью можно измерить величину прогиба при помощи индикатора?

Таблица 1

Определение прогиба

Определение угла поворота

Показания индикатора прогиба, мм

Опытный прогиб, мм

Теорети­ческий прогиб, мм

Относи­тельная погреш­ность

Показание индикатора угла поворота, m

Опытный угол поворота,  оп

Теорети­ческий угол поворота,  т

Относи­тельная погреш­ность



Где Р 0 – предварительная нагрузка, которой соответствует нулевое значение индикатора.

Р 1 , Р 2 , Р 3 – одинаковые значения приращения нагрузки.

Подпишитесь на новости


ВВЕДЕНИЕ. ПОСТАНОВКА ЗАДАЧИ.

1. ОПИСАНИЕ АЛГОРИТМА ПОВОРОТА ИЗОБРАЖЕНИЯ

2. РАЗРАБОТКА ПРИЛОЖЕНИЯ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ C#

2.1 Описание приложения

2.2 Тестирование приложения

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

ПРИЛОЖЕНИЕ А

ВВЕДЕНИЕ. ПОСТАНОВКА ЗАДАЧИ

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

1 . Описание алгоритма поворота изображения

Для поворота изображения на заданный в градусах угол используется функция private Bitmap RotateImage(Bitmap Image, int angle).

Входные параметры:

Bitmap Image - изображение для поворота;

int angle - угол поворота в градусах.

Функция возвращает повёрнутое на заданный угол изображение.

Алгоритм работы функции:

1) На вход подаётся изображение и угол поворота в градусах;

2) Вычисление синуса и косинуса угла поворота (единожды). Угол поворота задан в радианах;

3) Вычисление новой ширины и высоты изображения, используя вычисленный синус и косинус угла поворота;

4) Инициализация массива структур тира Point (Point points = new Point ), которые определяют параллелограмм.

5) В зависимости от угла поворота (в какой четверти он лежит в радианах) происходит вычисление координат трёх точек для построения нового изображения. Вычисление координат происходит на основе пункта (3) данного алгоритма (новая ширина и высота - пересчет координат Х и У точек);

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

g.DrawImage(Image, points); - функция прорисовки.

7) Возвращение повёрнутого изображения для использования вне данной функции.

Центрирование изображения осуществляется свойством элемента pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;

2 . РАЗРАБОТКА ПРИЛОЖЕНИЯ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ C#

В качестве инструмента разработки приложения по обработке изображения была выбрана среда MS Visual Studio 2012. Языком программирования выбран C#. Данный инструментарий предоставляет достаточный спектр возможностей по работе с графикой.

Разработано приложение согласно поставленной задаче.

2. 1 Описание приложения

поворот изображение угол диапазон

В основе приложения лежит класс frmRotationForm.

В данном классе реализованы следующие методы:

Метод private void btnRotateImage_Click(object sender, EventArgs e) обрабатывает нажатие на кнопку «повернуть изображение». После нажатия происходит попытка преобразования содержимого текстового поля в число (для дальнейшего использования в качестве переменной ang, которая предназначена для хранения угла поворота в градусах). Также в данном методе осуществляется обработка исключений, запуск функции RotateImage, которая и осуществляет поворот изображения.

Метод private Bitmap RotateImage(Bitmap Image, int angle) осуществляет поворот изображения на заданный угол. Возвращает повёрнутое изображение.

Метод private void btnLoadImage_Click(object sender, EventArgs e) загружает изображение с диска в PictureBox с оригинальным изображением.

Метод private void timer1_Tick(object sender, EventArgs e) выполняется на каждый такт таймера. В данном приложении частота установлена в 50 миллисекунд (для более «гладкой» работы в режиме «анимации»).

2. 2 Тестирование приложения

Разработанное приложение тестировалось в среде Microsoft Windows 7 64-bit с установленным.NET Framework 4.5. Результат запуска исполняемого файла Image_Rotation.exe представлен на рисунке 2.1.

Рисунок 2.1 - Окно приложения при запуске

При запуске в приложении «зашито» выбранное мной изображение по умолчанию. Его можно сменить, нажав кнопку «Загрузить изображение». Результат выбора собственного изображения представлен на рисунке 2.2.

Рисунок 2.2 - Выбор собственного изображения для поворота

Дальнейшие действия рассматриваются на изображении по умолчанию. Выбрав угол поворота в соответствующем текстовом поле в верхнем левом углу формы следует нажать кнопку «повернуть изображение». (см. рисунок 2.3).

Рисунок 2.3 - Результат поворота изображения на 8 градусов

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

В приложении реализована «защита от дурака», а именно: при попытке ввести угол больше 360 градусов, либо меньше -360 градусов, а также текст, выводится предупреждение и изображение не будет обработано:

Рисунок 2.4 - Попытка повернуть изображение на -361 градус

В приложении реализована возможность «анимированного вращения» по\против часовой стрелки, а также «зум» (увеличение картинки по размеру контейнера PictureBox).

Рисунок 2.5 - Анимированное вращение

ЗАКЛЮЧЕНИЕ

Задача, поставленная в техническом задании к контрольной работе, реализована.

Изучены приёмы обработки изображений, используя язык программирования C#.

Исходный код приложения представлен в «Приложении А».

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1 Старовойтов В.В. Цифровые изображения: от получения до

обработки / В.В. Старовойтов, Ю.И. Голуб - Минск: ОИПИ НАН Беларуси, 2014. - 202 с. - ISBN 978-985-6744-80-1.

2 Кристиан Нейгел, Билл Ивьен и др. C# 2008 и платформа.NET 3.5 для профессионалов - Professional C# 2008. -- М.: Диалектика, 2008. -- ISBN 978-5-8459-1458-3.

3 Разработка приложений на платформе Microsoft. MSDN [Электронный ресурс]: http://msdn.microsoft.com/ru-ru/library/4f9s3at1(v=vs.110).aspx . - Дата обращения 25.10.2014.

ПРИЛОЖЕНИЕ А

Листинг класса «frmRotationForm»

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Drawing.Drawing2D;

namespace Image_Rotation

public partial class frmRotationForm: Form

private int jj;//угол в градусах

public frmRotationForm()

InitializeComponent();

w.Text = pictureBox3.Image.Width.ToString();

h.Text = pictureBox3.Image.Height.ToString();

jj = Convert.ToInt32(textBox1.Text);

private void btnRotateImage_Click(object sender, EventArgs e)

ang = Convert.ToInt32(textBox1.Text);

if (ang < -360 || ang > 360)

catch (Exception ex)

MessageBox.Show("Разрешено использовать углы от 0 до 360. \nДопустается использование знака \"-\" для поворота против часовой стрелки.");

Bitmap i = new Bitmap(pictureBox1.Image);

pictureBox1.Image = this.RotateImage(i, ang);

//this.Controls.Add(pictureBox1);

private Bitmap RotateImage(Bitmap Image, int angle)

var pi2 = Math.PI/2;//ПИ на два

int oldWidth = Image.Width;

int oldHeigth = Image.Height;

var theta = angle * Math.PI / 180.0;//перевод в радианы

var locked_theta = theta;

if (locked_theta < 0.0) locked_theta += 2 * Math.PI;

double newWidth, newHeigth;

int nWidth, nHeigth;

double adjacentTop, oppositeTop;

double adjacentBottom, oppositeBottom;

#region Вычисление новой ширины и высоты

double SINUS = Math.Abs(Math.Sin(locked_theta));

double COSINUS = Math.Abs(Math.Cos(locked_theta));

if ((locked_theta >= 0.0 && locked_theta < pi2) || (locked_theta >= Math.PI && locked_theta < (Math.PI + pi2)))

{// Угол (>= 0 и < Pi/2) или (>= ПИ и < ПИ + Пи/2)

adjacentTop = COSINUS * oldWidth;

oppositeTop = SINUS * oldWidth;

adjacentBottom = COSINUS * oldHeigth;

oppositeBottom = SINUS * oldHeigth;

adjacentTop = SINUS * oldHeigth;

oppositeTop = COSINUS * oldHeigth;

adjacentBottom = SINUS * oldWidth;

oppositeBottom = COSINUS * oldWidth;

newWidth = adjacentTop + oppositeBottom;

newHeigth = adjacentBottom + oppositeTop;

nWidth = (int)(Math.Ceiling(newWidth));//округление до целых вверх

nHeigth = (int)(Math.Ceiling(newHeigth));

#endregion Вычисление новой ширины и высоты

Bitmap rotatedBmp = new Bitmap(nWidth,nHeigth);

Graphics g = Graphics.FromImage(rotatedBmp);

Point points = new Point ;//массив из 3 структур типа Point, которые определяют параллелограмм

//Три точки обозначают: верхний левый, верхний правый, нижний левый углы параллелограмма.

//Четвёртая точка экстраполируется из первых трёх

//точка отсчёта (0,0) - левый верхний угол

if (locked_theta >= 0.0 && locked_theta < pi2) //90

points = new Point((int)oppositeBottom, 0);

else if (locked_theta >= pi2 && locked_theta < Math.PI) //90-180

points = new Point(nWidth, (int)(oppositeTop));

else if (locked_theta >= Math.PI && locked_theta < (Math.PI + pi2))//180-270

points = new Point((int)(adjacentTop), nHeigth);

points = new Point(0, (int)(adjacentBottom));

points = new Point(nWidth, (int)(oppositeTop));

points = new Point(0, (int)(adjacentBottom));

points = new Point((int)(oppositeBottom), 0);

points = new Point((int)(adjacentTop), nHeigth);

label6.Text = "Центр ИСХОДНЫЙ х="+ (oldWidth / 2.0f).ToString() + ", у=" + (oldHeigth / 2.0f).ToString();

label7.Text = "Центр ПОВЕРНУТЫЙ х=" + (nWidth / 2.0f).ToString() + ", у=" + (nHeigth / 2.0f).ToString();

g.DrawImage(Image, points);

g.DrawRectangle(new Pen(Color.Red, 0.1f),new Rectangle(0,0,nWidth/2,nHeigth/2));

g.DrawRectangle(new Pen(Color.Red, 0.1f), new Rectangle(nWidth/2, nHeigth/2, nWidth/2-1, nHeigth/2-1));

Image.Dispose();

return rotatedBmp;

private void btnLoadImage_Click(object sender, EventArgs e)

OpenFileDialog dlg = new OpenFileDialog();

dlg.Title = "Open Image";

dlg.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*";

if (dlg.ShowDialog() == DialogResult.OK)

pictureBox3.Image = new Bitmap(dlg.OpenFile());

pictureBox1.Image = pictureBox3.Image;

w.Text = pictureBox1.Image.Width.ToString();

h.Text = pictureBox1.Image.Height.ToString();

private void timer1_Tick(object sender, EventArgs e)

if (checkBox2.Checked)

{//изменение режима пкчербокса на ЗУМ

pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

//если не отмечено, то изображение центрируется

pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;

if (checkBox1.Checked)

{//реализация "анимации"-вращения картинки вокруг своей оси по/против часовой

radioButton1.Visible = true;

radioButton2.Visible = true;

if (radioButton1.Checked)

{ //по часовой

this.textBox1.Text = jj++.ToString();

if (jj == 360) jj = 0;

{//против часовой

this.btnRotateImage_Click(this, e);

this.textBox1.Text = jj--.ToString();

if (jj == 0) jj = 359;

radioButton1.Visible = false;

radioButton2.Visible = false;

Подобные документы

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

    курсовая работа , добавлен 17.12.2013

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

    курсовая работа , добавлен 29.06.2013

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

    курсовая работа , добавлен 14.10.2012

    Общий алгоритм сравнения двух изображений. Метод максимальных площадей. Метод гистограмм. Подготовка изображения к распознаванию. Моделирование многомерной функции. Распределение векторов. Деформируемые модели. Реализация программного обеспечения.

    дипломная работа , добавлен 29.09.2008

    Описание этапов создания анимированного GIF изображения мультипликационного героя "Винни-Пуха" в программе Adobe Photoshop CS6. Создание дубликата слоя изображения и подготовка кадров для GIF анимации. Настройка эффектов анимации и результат GIF-файла.

    лабораторная работа , добавлен 05.03.2015

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

    дипломная работа , добавлен 17.06.2012

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

    курсовая работа , добавлен 18.03.2010

    Компьютерная графика. Пиксели, разрешение, размер изображения. Типы изображений. Черно-белые штриховые и полутоновые изображения. Индексированные цвета. Полноцветные изображения. Форматы файлов. Цвет и его модели. Цветовые модели: RGB, CMYK, HSB.

    реферат , добавлен 20.02.2009

    Методы кодирования изображения: кодированием длины серии, частотно-зависимое кодирование, метод Лемпеля-Зива. Размер строки при 16-битном цвете. Расчет размера всего исходного изображения. Примеры качественного и некачественного сжатия изображения.

    презентация , добавлен 22.10.2013

    Интерфейс программы Adobe Photoshop. Внесение изменений в изображение. Инструменты изменения оттенка и искажения изображения. Последовательность формирования изображения. Тоновая и цветовая коррекция изображения, работа с фильтрами и функциями.

Поворот растрового изображения на углы, кратные 90°, относительно геометрического центра изображения – задача тривиальная и решается без потери качества простым преобразованием координат каждого пикселя.

Ниже мы рассмотрим алгоритм прецизионного поворота растрового изображения на произвольный угол относительно произвольного центра с минимальными потерями.

Выражаю благодарность Харченко Владиславу Владимировичу за оказанную помощь.

Алгоритм

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

В качестве модели пикселя исходного изображения мы будем использовать квадрат со стороной = 1, с такими обозначениями углов:
i1 - самый правый угол;
i2 - самый нижний угол;
i3 - самый левый угол;
i4 - самый верхний угол.

Моделью итогового изображения будет сетка из параллельных горизонтальных и вертикальных линий с расстоянием между линиями = 1.

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

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

Поворот растрового изображения можно разделить на две части:
1. Поворот квадрата каждого пикселя исходного изображения относительно центра этого квадрата на заданный угол.
2. Смещение центра квадрата пикселя в соответствии с углом поворота изображения относительно центра поворота изображения таким образом, чтобы квадрат занял своё итоговое положение на сетке итогового изображения.
При этом сетка итогового изображения рассекает квадрат каждого пикселя исходного изображения на «осколки» в количестве 4, 5 или 6 штук.

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


Условные обозначения здесь следующие:
- цифры в ячейках обозначают номера углов квадрата пикселя, которые попали в данную ячейку сетки итогового изображения после поворота изображения;
- зелёным цветом обозначены ячейки, в которые попали участки пикселя и гарантированно оставили там по «осколку»;
- жёлтым цветом обозначены ячейки, в которые, в зависимости от условий, могут попасть (а могут и не попасть) «осколки» квадрата пикселя, образованные не углами квадрата, а сторонами квадрата.

Для наглядности приведу одну из возможных вариаций варианта №3:

Как видим, верхняя правая ячейка не содержит в себе «осколка» пикселя, хотя при других условиях поворота могла бы содержать.
Чтобы не нагружать читателя детальными геометрическими выкладками, скажу сразу, что во всех этих 23-х вариантах пиксель исходного изображения рассекается на «осколки», площадь которых легко вычисляется комбинированием 4-х формул. Ниже приведены эти формулы с иллюстрациями. Красным цветом обозначены линии сетки итогового изображения, которые рассекают квадрат пикселя. Жёлтым цветом закрашена область, площадь которой вычисляется формулой.

Формула 1
Эта формула не используется для расчёта окончательной площади «осколка», но её удобно использовать для быстрого расчёта вспомогательных промежуточных площадей, поскольку нам заведомо известно, что площадь всего пикселя = 1.
В качестве входных переменных во всех формулах используются высоты, опущенные из углов квадрата на сетку итогового изображения, по той простой причине, что расчёт этих высот сводится к мгновенному выделению дробной части числового значения координаты соответствующего угла квадрата пикселя.

Формула 2

Данная формула используется только в вариантах 1 и 2.

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

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

С учётом всего вышесказанного, в общем виде алгоритм будет выглядеть так:
1. Загружаем в память ЭВМ исходное изображение.
2. Рассчитываем размеры итогового изображения в пикселях.
3. Создаём промежуточный двумерный массив, каждый элемент которого содержит 3 составляющие цвета RGB в формате числа с плавающей запятой. Размеры массива равны размерам итогового изображения.
4. Последовательно перебираем все пиксели исходного изображения; поворачиваем каждый из них на заданный угол и располагаем на сетке итогового изображения, рассчитав 4 координаты углов квадрата пикселя; классифицируем пиксель по 23 вариантам и считаем площади «осколков»; добавляем в соответствующие элементы промежуточного массива цвета полученных «осколков» пропорционально площади этих «осколков».
5. После обработки всех пикселей исходного изображения округляем значения RGB в промежуточном массиве до целого значения для каждого элемента и создаём на базе этих целых значений итоговое изображение в формате BMP.

Программа

На основании приведённого алгоритма была написана программа для Windows. Исходные коды на Object Pascal и скомпилированный исполняемый файл можно скачать .

Интерфейс программы.
По нажатию на кнопку «Open...» открывается диалог выбора BMP-файла. Поддерживаются битмапы только с 24-битной палитрой. Открытое изображение отображается в окне. В заголовке окна выводится полный путь к файлу и размеры изображения.

В поле «Angle» задаётся угол поворота в градусах – любое положительное число.
В качестве десятичного разделителя при вводе дробных чисел может быть использована как точка, так и запятая.

Радиокнопками «CW» и «CCW» задаётся направление вращения: «по часовой стрелке» и «против часовой стрелки», соответственно.

В блоке «Background color» можно задать цвет фона, с которым будут смешиваться граничные пиксели изображения. По умолчанию цвет фона – чёрный.

В полях «Centre X» и «Centre Y» задаются координаты центра поворота. При этом следует учитывать, что начало координат находится в левом верхнем углу изображения и Y увеличивается вниз. По умолчанию центр поворота устанавливается в геометрическом центре загруженного изображения.

По нажатию на кнопку «Rotate» либо по нажатию на клавишу Enter изображение поворачивается на заданный угол относительно заданного центра поворота и отображается в окне. Поворот изображения на углы, кратные 90°, реализован по упрощённой схеме, путём простого преобразования координат пикселей исходного изображения, при этом значения «Centre X» и «Centre Y» игнорируются.
Время работы алгоритма в секундах отображается под кнопкой «Rotate».

Через кнопку «Save…» повёрнутое изображение можно сохранить в BMP-файл.

Если итоговое изображение не помещается в окне – оно подгоняется к границам окна API-функцией StretchBlt – поэтому оценить реальное качество больших картинок можно только по сохранённому BMP-файлу.
Для поворота изображения на другой угол его не нужно загружать повторно - поворачивается изображение из выбранного файла, а не отображённое в данный момент в окне.

Изображение с размерами 1024 х 768 на машине с четырёхядерным процессором 2,67 ГГц поворачивается данной программой на произвольный угол, в среднем, приблизительно, за 0,5 секунды. Изображение с размерами 4000 х 4000 - примерно за 10 секунд. Время работы алгоритма для разных углов может отличаться в связи с тем, что изображение при разных углах дробится на разное количество «осколков», на вычисление площадей которых суммарно тратится, соответственно, разное время.

Промежуточный массив, содержащий информацию о цвете пикселей итогового изображения в формате числа с плавающей запятой, реализован на типе extended (10 байт), поэтому обработка больших изображений (примерно более 5000 х 5000 пикселей) может вызвать ошибку переполнения памяти. Улучшить ситуацию возможно, применив менее точный тип данных и сохраняя целую часть числа сразу в итоговый битмап, оставляя во вспомогательном массиве только дробную часть.

Результаты

Проведём сравнительный анализ работы прецизионного алгоритма и алгоритма поворота изображений, реализованного в программе Photoshop.
Тест 1
Для первого теста я взял очень простое изображение - горизонтальную линию чёрного цвета толщиной 1 пиксель и длиной 10 пикселей, смещённую относительно центра белого квадрата с размерами 100 х 100 пикселей:

После чего я повернул данное изображение относительно точки с координатами (0, 0) на 3° по часовой стрелке. Точка (0, 0) выбрана потому, что, судя по моим экспериментам, Photoshop поворачивает изображение относительно именно этой точки. Вот сравнительный результат (увеличено в 24 раза):

Прецизионный алгоритм

Photoshop 7.0.1

Photoshop CS6 (64 Bit)
Алгоритм Photoshop даёт более контрастную картинку, прецизионный алгоритм несколько «размывает» изображение. Но в целом, при визуальной оценке, результат получается почти одинаковым. Попутно отметим, что алгоритм поворота, реализованный в Photoshop, не претерпел за 10 лет существенных изменений.

Тест 2
Для второго теста я выбрал тюльпан из стандартного дистрибутива Win7:

После поворота данного изображения на 5° по часовой стрелке относительно геометрического центра я суммировал цвет всех пикселей в разрезе каналов RGB. Вот результат для прецизионного алгоритма и алгоритма Photoshop:
Числа в скобках показывают абсолютное отклонение данного показателя от оригинала.
Цвет изображения после прецизионного поворота и до округления практически не поменялся - чего и следовало ожидать.
Самое большое отклонение, в данном конкретном случае, мы обнаруживаем по каналу G для алгоритма Photoshop. В процентном отношении это отклонение составляет всего 0,06%, поэтому «на глаз» оно не заметно, но из соображений перфекционизма результат у Photoshop получается хуже, чем у прецизионного алгоритма.
Важно отметить, что округление цвета каждого пикселя в прецизионном алгоритме до целочисленного значения, необходимого для формата BMP, необратимо уничтожает часть информации о цвете.

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

Повёрнутого на 5° по часовой стрелке, соответственно, Photoshop"ом:

И прецизионным алгоритмом:

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

Выводы

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

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

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

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



Понравилась статья? Поделитесь с друзьями!