Эргэлтийн өнцөг гэж юу вэ. Профайлаар дизайн хийх

Зургийн геометрийн төвтэй харьцуулахад 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-ын эх кодууд болон хөрвүүлсэн гүйцэтгэх файлыг татаж авах боломжтой.

Програмын интерфейс.
"Нээх..." товчийг дарснаар BMP файл сонгох харилцах цонх нээгдэнэ. Зөвхөн 24 битийн палитр бүхий бит зураглалыг дэмждэг. Нээлттэй зураг цонхонд харагдана. Цонхны гарчиг нь файлын бүрэн зам болон зургийн хэмжээг харуулна.

"Өнцөг" талбарт эргэлтийн өнцгийг градусаар зааж өгнө - дурын эерэг тоо.
Бутархай тоог оруулахдаа цэг эсвэл таслалыг аравтын бутархай болгон ашиглаж болно.

"CW" ба "CCW" радио товчлуурууд нь "цагийн зүүний дагуу" ба "цагийн зүүний эсрэг" эргэлтийн чиглэлийг тус тус тохируулдаг.

"Арын өнгө" хэсэгт та зургийн хилийн пикселүүдийг холих дэвсгэрийн өнгийг тохируулж болно. Үндсэн дэвсгэр өнгө нь хар өнгөтэй байна.

"Centre X" ба "Centre Y" талбарт эргэлтийн төвийн координатыг зааж өгсөн болно. Координатын гарал үүсэл нь зургийн зүүн дээд буланд байх ба Y нь доошоо нэмэгддэг гэдгийг анхаарах хэрэгтэй. Анхдагчаар эргүүлэх төвийг ачаалагдсан зургийн геометрийн төвд тохируулсан байна.

"Эргүүлэх" товчийг дарж эсвэл Enter товчийг дарснаар дүрсийг заасан эргэлтийн төвтэй харьцуулахад тодорхой өнцгөөр эргүүлж, цонхонд харуулна. Зургийг 90°-ийн үржвэртэй өнцгөөр эргүүлэх нь хялбаршуулсан схемийн дагуу анхны зургийн пикселийн координатыг хувиргах замаар хийгддэг бөгөөд "Төв X" болон "Төв Y" утгуудыг үл тоомсорлодог.
"Эргэх" товчлуурын доор алгоритмын ажиллах хугацааг секундээр харуулна.

"Хадгалах..." товчийг ашиглан эргүүлсэн зургийг BMP файлд хадгалах боломжтой.

Хэрэв эцсийн зураг цонхонд тохирохгүй бол StretchBlt API функцийг ашиглан цонхны хил хязгаарт тохируулагдсан тул том зургийн бодит чанарыг зөвхөн хадгалсан BMP файлыг ашиглан үнэлэх боломжтой.
Зургийг өөр өнцгөөр эргүүлэхийн тулд та үүнийг дахин ачаалах шаардлагагүй - сонгосон файлын зургийг эргүүлэх бөгөөд цонхонд одоогоор харагдахгүй байна.

Дөрвөн цөмт 2.67 ГГц процессортой машин дээрх 1024 х 768 хэмжээтэй зургийг энэ программ ашиглан дурын өнцгөөр дунджаар 0.5 секундын дотор эргүүлнэ. 4000 x 4000 хэмжээтэй зураг - ойролцоогоор 10 секундын дотор. Янз бүрийн өнцөгт байгаа дүрсийг өөр өөр тооны "хэсэг" болгон хуваасан тул алгоритмын ажиллах хугацаа өөр өөр байж болно, эдгээр хэсгүүдийн талбайг тооцоолоход зарцуулсан нийт хугацаа нь өөр өөр байдаг.

Хөвөгч цэгийн форматын эцсийн зургийн пикселийн өнгөний талаарх мэдээллийг агуулсан завсрын массив нь өргөтгөсөн төрөл (10 байт) дээр хэрэгждэг тул том хэмжээний зургийг (ойролцоогоор 5000 x 5000 пикселээс дээш) боловсруулах нь санах ойн хэт их алдааг үүсгэж болзошгүй юм. Нарийвчлал багатай өгөгдлийн төрлийг ашиглаж, тооны бүхэл хэсгийг шууд эцсийн битийн зурагт хадгалах замаар туслах массив дахь зөвхөн бутархай хэсгийг үлдээснээр нөхцөл байдлыг сайжруулах боломжтой.

үр дүн

Photoshop программ дээр хэрэгжиж буй нарийвчлалын алгоритм болон дүрсийг эргүүлэх алгоритмын үйлдлийн харьцуулсан шинжилгээг хийцгээе.
Туршилт 1
Эхний туршилтын хувьд би маш энгийн зураг авсан - 100 х 100 пикселийн хэмжээтэй цагаан дөрвөлжингийн төвөөс 1 пикселийн зузаантай, 10 пикселийн урттай хэвтээ хар шугам.

Үүний дараа би энэ зургийг координаттай (0, 0) цэгтэй харьцуулахад цагийн зүүний дагуу 3 ° эргүүлэв. (0, 0) цэгийг сонгосон учир нь миний туршилтууд дээр үндэслэн Photoshop нь зургийг энэ цэгтэй харьцуулахад эргүүлдэг. Харьцуулсан үр дүн (24x томруулсан):

Нарийвчлалын алгоритм

Photoshop 7.0.1

Photoshop CS6 (64 бит)
Photoshop алгоритм нь илүү тодосгогч дүрсийг гаргадаг бол нарийвчлалын алгоритм нь дүрсийг бага зэрэг бүдгэрүүлдэг. Гэхдээ ерөнхийдөө харааны үнэлгээгээр үр дүн нь бараг ижил байдаг. Өнгөрсөн 10 жилийн хугацаанд Photoshop-т хэрэгжүүлсэн эргүүлэх алгоритм нь дорвитой өөрчлөлт ороогүйг бид тэмдэглэж байна.

Туршилт 2
Хоёр дахь туршилтын хувьд би стандарт Win7 түгээлтээс Tulip-ийг сонгосон.

Энэ зургийг геометрийн төвтэй харьцуулахад цагийн зүүний дагуу 5 ° эргүүлсний дараа би бүх пикселийн өнгийг RGB сувгаар нэгтгэв. Нарийвчлалын алгоритм болон Photoshop алгоритмын үр дүн энд байна:
Хаалтанд байгаа тоонууд нь энэ үзүүлэлтийн анхныхаас үнэмлэхүй хазайлтыг харуулж байна.
Нарийвчлалтай эргүүлсний дараа болон бөөрөнхийлөхөөс өмнө зургийн өнгө бараг өөрчлөгдөөгүй - үүнийг хүлээж байсан.
Энэ тохиолдолд хамгийн том хазайлт нь Photoshop алгоритмын G сувгаас олддог. Хувиараа энэ хазайлт нь ердөө 0.06% байгаа тул "нүдээр" мэдэгдэхүйц биш боловч төгс төгөлдөр байдлын үүднээс Photoshop-ийн үр дүн нарийвчлалын алгоритмаас муу байна.
Нарийвчлалын алгоритм дахь пиксел бүрийн өнгийг BMP форматад шаардагдах бүхэл тоонд дугуйлах нь зарим өнгөт мэдээллийг эргэлт буцалтгүй устгадаг гэдгийг анхаарах нь чухал юм.

Хоёр алгоритмыг харааны харьцуулахын тулд би зургийн томруулсан хэсгийг өгөх болно.

Цагийн зүүний дагуу 5° эргүүлсэн, Photoshop:

Мөн нарийн алгоритмаар:

Харьцуулсан дүн шинжилгээ нь Photoshop нь зургийн тодосгогч элементүүдийг хадгалахад илүү сайн гэдгийг харуулж байгаа боловч үүнтэй зэрэгцэн гажиг өнгөний "цагаан гэрэл" үүсгэдэг. Нарийвчлалын алгоритм нь өнгийг гажуудуулдаггүй, гэхдээ тэр үед дүрсийг бага зэрэг бүдгэрүүлдэг.

дүгнэлт

1. Нарийвчлалтай, нэгэн зэрэг растер дүрсийг дурын өнцгөөр харьцангуй хурдан эргүүлэх боломжтой. Мэргэжлийн график засварлагчид яагаад хэрэглэгчдэд зургийг арай илүү хугацаанд маш нарийвчлалтайгаар эргүүлэх боломж олгодоггүй нь миний хувьд нууц хэвээр байна.

2. авч үзсэн алгоритмын хэт нарийвчлалыг үл харгалзан зургийн урвуу хувиргалт, i.e. Өнгөний тодорхой утгыг (хөвөгч цэгийн форматаар) дугуйлах нь зарим өнгөт мэдээллийг эргэлт буцалтгүй устгадаг тул чанарыг алдалгүйгээр эсрэг өнцөг рүү эргүүлэх боломжгүй юм.

3. Ялгаатай нарийн ширийн зүйлийг нүдээр харах үүднээс хамгийн сайн үр дүнг Photoshop-ын оновчтой бус алгоритмаар олж авдаг. Зургийн өнгөний талаархи хамгийн их мэдээллийг хадгалах нь чухал тохиолдолд нарийвчлалын алгоритмыг ашиглах нь утга учиртай юм.

UPD:Практикт ашиглахын тулд би хялбаршуулсан алгоритмыг хэрэгжүүлдэг програмыг бичсэн бөгөөд үүнд эцсийн зургийн пиксел бүрийн хувьд анхны зураг дээрх шаардлагатай бүх пикселийн хэсгүүдийг дараалан тооцож, өнгөний бөөрөнхийлөлт нэн даруй хийгддэг. Үүний дараа л эцсийн зургийн дараагийн пикселийг тооцоолно. Энэ тохиолдолд програм нь эх зургийн нэг пиксел рүү хэд хэдэн удаа ханддаг. Тооцооллын хугацаа ийнхүү дунджаар 1.7 дахин нэмэгдсэн боловч алгоритмын энэ хувилбарын санах ой нь зөвхөн битийн зургийг хадгалахад зарцуулагддаг бөгөөд энэ нь том хэмжээтэй зурагтай ажиллах боломжийг олгодог. Та програм болон эх сурвалжийг татаж авах боломжтой


Тригонометрийн чухал ойлголт бол эргэлтийн өнцөг. Доор бид эргэлтийн талаархи санааг тууштай өгч, холбогдох бүх ойлголтыг танилцуулах болно. Эргэлтийн тухай ерөнхий санаа, бүрэн эргэлт гэж хэлье. Дараа нь эргэлтийн өнцгийн тухай ойлголт руу шилжиж, эргэлтийн чиглэл, хэмжээ зэрэг үндсэн шинж чанаруудыг авч үзье. Эцэст нь бид дүрсийг цэгийн эргэн тойронд эргүүлэх тодорхойлолтыг өгдөг. Бид онолыг бүхэлд нь тайлбарлах жишээ, график дүрслэлээр текстэнд өгөх болно.

Хуудасны навигаци.

Цэгийг тойрон эргэхийг юу гэж нэрлэдэг вэ?

"Цэгийг тойрон эргүүлэх" гэсэн хэллэгийн зэрэгцээ бид ижил утгатай "цэгийг тойрон эргэх" ба "цэгийг тойрон эргэх" гэсэн хэллэгүүдийг ашиглах болно гэдгийг нэн даруй тэмдэглэе.

Ингээд танилцуулъя цэгийг тойруулан эргүүлэх тухай ойлголт.

Эхлээд эргэлтийн төвийг тодорхойлъё.

Тодорхойлолт.

Эргүүлэх цэгийг дуудна эргэлтийн төв.

Одоо цэгийг эргүүлсний үр дүнд юу болохыг хэлье.

Тодорхой А цэгийг эргэлтийн төвтэй харьцуулахад эргүүлсний үр дүнд A 1 цэгийг олж авдаг (тодорхой тооны тохиолдолд энэ нь А-тай давхцаж болно), А 1 цэг нь тойрог дээр байрладаг. төв OA радиусын О цэгт. Өөрөөр хэлбэл, О цэгтэй харьцангуй эргүүлэхэд А цэг нь ОА радиустай О цэг дээр төвтэй тойрог дээр байрлах А 1 цэг рүү очно.

О цэг өөрөө эргэх үед өөрөө болж хувирдаг гэж үздэг. Өөрөөр хэлбэл, эргэлтийн төвийг тойрон эргүүлсний үр дүнд О цэг өөрөө болж хувирдаг.

Мөн О цэгийн эргэн тойронд А цэгийн эргэлтийг ОА радиустай О цэг дээр төвтэй тойрог дахь А цэгийн хөдөлгөөний үр дүнд үүссэн шилжилт гэж үзэх нь зүйтэй гэдгийг тэмдэглэх нь зүйтэй.

Ойлгомжтой болгохын тулд бид А цэгийг О цэгийн эргэн тойронд эргүүлэх дүрслэлийг доорх зургуудад өгөх болно, бид сум ашиглан А цэгийн хөдөлгөөнийг харуулах болно.

Бүтэн эргэлт

А цэгийг эргэлтийн төвтэй харьцуулахад эргүүлэх боломжтой бөгөөд ингэснээр тойргийн бүх цэгийг давсан А цэг нэг байранд байх болно. Энэ тохиолдолд тэд А цэгийг О цэгийг тойрон хөдөлсөн гэж хэлдэг.

Бүрэн хувьсгалын график дүрслэлийг өгье.

Хэрэв та нэг эргэлт дээр зогсохгүй, харин цэгийг тойргийн эргэн тойронд үргэлжлүүлбэл хоёр, гурав гэх мэт бүрэн эргэлт хийж болно. Доорх зурган дээр баруун талд хоёр бүтэн эргэлт, зүүн талд гурван эргэлт хийх боломжтойг харуулж байна.


Эргэлтийн өнцгийн тухай ойлголт

Эхний догол мөрөнд оруулсан цэгийг эргүүлэх тухай ойлголтоос харахад А цэгийг О цэгийн эргэн тойронд эргүүлэх хязгааргүй олон сонголт байгаа нь тодорхой байна. Үнэн хэрэгтээ ОА радиустай О цэг дээр төвтэй тойрог дээрх дурын цэгийг А цэгийг эргүүлсний үр дүнд олж авсан А 1 цэг гэж үзэж болно. Тиймээс, нэг эргэлтийг нөгөөгөөс нь ялгахын тулд бид танилцуулж байна эргэлтийн өнцгийн тухай ойлголт.

Эргэлтийн өнцгийн шинж чанаруудын нэг нь эргэлтийн чиглэл. Эргэлтийн чиглэл нь тухайн цэгийг цагийн зүүний дагуу эсвэл цагийн зүүний эсрэг эргүүлэх эсэхийг тодорхойлдог.

Эргэлтийн өнцгийн өөр нэг шинж чанар нь түүний хэмжээ. Эргэлтийн өнцгийг ижил нэгжээр хэмждэг: градус ба радианууд хамгийн түгээмэл байдаг. Эргэлтийн өнцгийг геометрийн өнцөгөөс ялгаатай нь хасах хязгаараас нэмэх хязгааргүй хүртэлх дурын бодит тоогоор градусаар илэрхийлж болно гэдгийг энд тэмдэглэх нь зүйтэй бөгөөд түүний градусын утга нь эерэг бөгөөд 180-аас хэтрэхгүй байна.

Грек цагаан толгойн жижиг үсгүүдийг эргүүлэх өнцгийг илэрхийлэхэд ихэвчлэн ашигладаг: гэх мэт. Олон тооны эргэлтийн өнцгийг тэмдэглэхийн тулд доод үсэг бүхий нэг үсгийг ихэвчлэн ашигладаг, жишээлбэл, .

Одоо эргэлтийн өнцгийн шинж чанаруудын талаар илүү дэлгэрэнгүй, дарааллаар нь ярилцъя.

Эргэлтийн чиглэл

Төв нь О цэгтэй тойрог дээр А ба А 1 цэгүүдийг тэмдэглэе. Та О төвийг цагийн зүүний дагуу эсвэл цагийн зүүний эсрэг эргүүлснээр А цэгээс А 1 цэг рүү хүрч болно. Эдгээр эргэлтийг өөр өөр гэж үзэх нь логик юм.

Эерэг ба сөрөг чиглэлд эргэлтийг дүрслэн үзүүлье. Доорх зураг нь зүүн талд эерэг чиглэлд, баруун талд нь сөрөг чиглэлд эргэлтийг харуулж байна.

Эргэлтийн өнцгийн утга, дурын утгын өнцөг

Эргэлтийн төвөөс өөр цэгийн эргэлтийн өнцөг нь түүний хэмжээг зааж өгөх замаар бүрэн тодорхойлогддог бол эргэлтийн өнцгийн хэмжээгээр энэ эргэлт хэрхэн хийгдсэнийг дүгнэж болно.

Дээр дурдсанчлан эргэлтийн өнцгийг градусаар −∞-аас +∞ хүртэлх тоогоор илэрхийлнэ. Энэ тохиолдолд нэмэх тэмдэг нь цагийн зүүний дагуу, хасах тэмдэг нь цагийн зүүний эсрэг эргэлттэй тохирч байна.

Одоо эргэлтийн өнцгийн утга ба түүнд тохирох эргэлтийн хоорондох захидал харилцааг тогтоох шаардлагатай байна.

Тэг градусын эргэлтийн өнцгөөс эхэлцгээе. Энэ эргэлтийн өнцөг нь А цэгийн өөр рүүгээ чиглэсэн хөдөлгөөнтэй тохирч байна. Өөрөөр хэлбэл, О цэгийн эргэн тойронд 0 градус эргүүлэхэд А цэг байрандаа үлдэнэ.

Бид О цэгийн эргэн тойронд А цэгийн эргэлтийг үргэлжлүүлж, эргэлт нь хагас эргэлтийн дотор явагдана. Бид А цэгийг А цэг рүү очно 1 гэж үзнэ. Энэ тохиолдолд AOA 1 өнцгийн үнэмлэхүй утга градусаар 180-аас хэтрэхгүй байна. Хэрэв эргэлт эерэг чиглэлд явагдсан бол эргэлтийн өнцгийн утгыг AOA 1 өнцгийн утгатай тэнцүү гэж үзнэ, хэрэв сөрөг чиглэлд эргэлт хийсэн бол түүний утгыг өнцгийн утгатай тэнцүү гэж үзнэ. Хасах тэмдэгтэй AOA 1. Жишээлбэл, 30, 180 ба -150 градусын эргэлтийн өнцгийг харуулсан зураг энд байна.


180 градусаас их ба -180 градусаас бага эргэлтийн өнцгийг дараах нэлээд ойлгомжтой зүйл дээр үндэслэн тодорхойлно. дараалсан эргэлтийн шинж чанарууд: О төвийн эргэн тойронд А цэгийн хэд хэдэн дараалсан эргэлт нь нэг эргэлттэй тэнцүү бөгөөд түүний хэмжээ нь эдгээр эргэлтүүдийн хэмжээсийн нийлбэртэй тэнцүү байна.

Энэ өмчийг харуулсан жишээг өгье. О цэгтэй харьцуулахад А цэгийг 45 градусаар эргүүлж, дараа нь энэ цэгийг 60 градусаар эргүүлж, дараа нь энэ цэгийг -35 градусаар эргүүлье. Эдгээр эргэлтүүдийн завсрын цэгүүдийг A 1, A 2, A 3 гэж тэмдэглэе. А цэгийг 45+60+(−35)=70 градусын өнцгөөр нэг эргүүлснээр бид ижил А 3 цэг рүү хүрч чадна.

Тиймээс, бид 180 градусаас дээш эргэлтийн өнцгийг өнцгөөр хэд хэдэн дараалсан эргэлт хэлбэрээр илэрхийлэх бөгөөд тэдгээрийн нийлбэр нь анхны эргэлтийн өнцгийн утгыг өгдөг. Жишээлбэл, 279 градусын эргэлтийн өнцөг нь 180 ба 99 градус, 90, 90, 90, 9 градус, 180, 180, -81 градус, эсвэл 1 градусын дараалсан 279 эргэлттэй тохирч байна.

-180 градусаас бага эргэлтийн өнцгийг ижил төстэй байдлаар тодорхойлно. Жишээлбэл, −520 градусын эргэлтийн өнцгийг цэгийн дараалсан −180, −180, −160 градусаар эргүүлэх гэж тайлбарлаж болно.

Дүгнэж хэлье. Бид эргэлтийн өнцгийг тодорхойлсон бөгөөд түүний утгыг градусаар −∞-аас +∞ хүртэлх интервалаас зарим бодит тоогоор илэрхийлнэ. Тригонометрийн хувьд бид эргэлтийн өнцөгтэй тусгайлан ажиллах болно, гэхдээ "эргэлт" гэдэг үгийг ихэвчлэн орхигдуулдаг бөгөөд тэдгээрийг зүгээр л "өнцөг" гэж нэрлэдэг. Тиймээс тригонометрийн хувьд бид дурын хэмжигдэхүүнтэй өнцгөөр ажиллах болно, үүгээр бид эргэлтийн өнцгийг хэлнэ.

Энэ цэгийг дүгнэхийн тулд эерэг чиглэлд бүрэн эргэлт нь 360 градусын эргэлтийн өнцөгтэй (эсвэл 2 π радиан), сөрөг чиглэлд - 360 градус (эсвэл -2 π рад) эргэх өнцөгтэй тохирч байгааг тэмдэглэж байна. . Энэ тохиолдолд том эргэлтийн өнцгийг тодорхой тооны бүтэн эргэлт, өөр эргэлтийг -180-аас 180 градусын өнцгөөр илэрхийлэх нь тохиромжтой. Жишээлбэл, 1340 градусын эргэлтийн өнцгийг авъя. 1340-ийг 360·4+(−100) гэж төсөөлөхөд амархан. Өөрөөр хэлбэл, анхны эргэлтийн өнцөг нь эерэг чиглэлд 4 бүтэн эргэлт, дараагийн эргэлт -100 градустай тохирч байна. Өөр нэг жишээ: −745 градусын эргэлтийн өнцгийг −745=(−360) 2+(−25) байх тул цагийн зүүний эсрэг хоёр эргэлт, дараа нь −25 градус эргүүлэх гэж тайлбарлаж болно.

Дүрсийг нэг цэгийн эргэн тойронд өнцгөөр эргүүлнэ

Цэгийг эргүүлэх тухай ойлголтыг хялбархан сунгадаг ямар ч дүрсийг нэг цэгийн эргэн тойронд өнцгөөр эргүүлэх(бид эргэлт хийж буй цэг болон эргэлдэж буй дүрс хоёулаа нэг хавтгайд байрладаг ийм эргэлтийн тухай ярьж байна).

Дүрсийг эргүүлэх гэдэг нь тухайн цэгийн эргэн тойронд тухайн зургийн бүх цэгүүдийг өгөгдсөн өнцгөөр эргүүлэхийг хэлнэ.

Жишээлбэл, дараах үйлдлийг үзүүлье: AB сегментийг О цэгтэй харьцуулахад өнцгөөр эргүүлэх нь энэ сегментийг эргүүлэхэд A 1 B 1 сегмент болж хувирна.

Ном зүй.

  • Алгебр:Сурах бичиг 9-р ангийн хувьд. дундаж сургууль/Ю. Н.Макарычев, Н.Г.Миндюк, К.И.Нешков, С.Б.Суворова; Эд. С.А.Теляковский.- М.: Боловсрол, 1990.- 272 х.: илл.- isbn 5-09-002727-7
  • Башмаков М.И.Алгебр ба шинжилгээний эхлэл: Сурах бичиг. 10-11 ангийн хувьд. дундаж сургууль - 3 дахь хэвлэл. - М.: Боловсрол, 1993. - 351 х.: өвчтэй. - ISBN 5-09-004617-4.
  • Алгебрба шинжилгээний эхлэл: Proc. 10-11 ангийн хувьд. Ерөнхий боловсрол байгууллагууд / A. N. Kolmogorov, A. M. Abramov, P. Dudnitsyn болон бусад; Эд. A. N. Kolmogorov - 14-р хэвлэл - М.: Боловсрол, 2004. - 384 х.: ISBN 5-09-013651-3.
  • Гусев В.А., Мордкович А.Г.Математик (техникийн сургуульд элсэгчдэд зориулсан гарын авлага): Proc. тэтгэмж.- М.; Илүү өндөр сургууль, 1984.-351 х., өвчтэй.

ОРШИЛ. АСУУДЛЫН ТОГТОЛЦОО.

1. ЗУРГИЙГ ЭРГҮҮЛЭХ АЛГОРИТМЫН ТОДОРХОЙЛОЛТ

2. C# ХЭЛНИЙ ПРОГРАМЧЛАЛЫН ХЭЛНИЙ ХЭРЭГЛЭЭ ХӨГЖҮҮЛЭХ

2.1 Хэрэглээний тайлбар

2.2 Програмыг турших

ДҮГНЭЛТ

АШИГЛАСАН ЭХ ҮҮСВЭРИЙН ЖАГСААЛТ

ХАВСРАЛТ А

ОРШИЛ. АСУУДЛЫН ТОГТОЛЦОО

"Зургийг олж авах, боловсруулах" хичээлийг судлах ажлын хүрээнд алгоритмыг тайлбарлах, хэрэглэгчийн тодорхойлсон өнцгөөр дүрсийг төвийн эргэн тойронд эргүүлэх функцийг хэрэгжүүлэх даалгаврыг тест болгон тавьсан. Өнцгийн косинус ба синусыг нэг удаа тооцоол. Бүх анхны параметрүүдийг дур зоргоороо тохируулж, зөвшөөрөгдөх утгын мужид нийцэж байгаа эсэхийг шалгана уу.

1 . Зургийг эргүүлэх алгоритмын тайлбар

Зургийг градусаар заасан өнцгөөр эргүүлэхийн тулд хувийн Bitmap RotateImage(Bimap Image, int өнцөг) функцийг ашиглана уу.

Оролтын параметрүүд:

Bitmap Image - эргүүлэх зураг;

int өнцөг - градусаар эргүүлэх өнцөг.

Энэ функц нь өгөгдсөн өнцгөөр эргүүлсэн зургийг буцаана.

Функцийн алгоритм:

1) Оролт нь зураг ба эргэлтийн өнцөгийг градусаар илэрхийлнэ;

2) Эргэлтийн өнцгийн синус ба косинусыг тооцоол (нэг удаа). Эргэлтийн өнцгийг радианаар тодорхойлно;

3) Эргэлтийн өнцгийн тооцоолсон синус ба косинусыг ашиглан зургийн шинэ өргөн, өндрийг тооцоолох;

4) Параллелограммыг тодорхойлсон Цэгтэй буудлагын галерейн бүтэц (Цэг цэг = шинэ Цэг) массивыг эхлүүлэх.

5) Эргэлтийн өнцгөөс (аль улиралд радианаар оршдог) хамааран гурван цэгийн координатыг тооцоолж, шинэ дүрсийг бүтээнэ. Координатыг энэ алгоритмын (3) цэг дээр үндэслэн тооцдог (шинэ өргөн ба өндөр - цэгүүдийн X ба Y координатыг дахин тооцоолох);

6) Гурван цэг (параллелограммын зүүн дээд, баруун дээд, зүүн доод булан. Дөрөв дэх цэгийг эхний гурван цэг дээр үндэслэн экстраполяци) ашиглан эргүүлсэн дүрсийг зурах.

g.DrawImage(Зураг, оноо); - зургийн функц.

7) Энэ функцээс гадуур ашиглахаар эргүүлсэн зургийг буцаана.

Зургийн голлуур нь pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage элементийн шинж чанараар хийгддэг;

2 . C# ХЭЛНИЙ ПРОГРАМЧЛАЛЫН ХЭЛНИЙ ХЭРЭГЛЭЭ ХӨГЖҮҮЛНЭ

Програмчлалын хэлээр MS Visual Studio 2012 программыг зураг боловсруулах программ болгон сонгосон. Энэхүү хэрэгсэл нь графиктай ажиллахад хангалттай олон боломжийг олгодог.

Даалгаврын дагуу програм боловсруулсан.

2. 1 Хэрэглээний тодорхойлолт

зургийн өнцгийн хүрээг эргүүлэх

Уг програм нь frmRotationForm класс дээр суурилдаг.

Энэ анги нь дараах аргуудыг хэрэгжүүлдэг.

Хувийн void btnRotateImage_Click(объект илгээгч, EventArgs e) арга нь "зураг эргүүлэх" товчийг дарахад зохицуулдаг. Товшсоны дараа текст талбарын агуулгыг тоо болгон хөрвүүлэх оролдлого хийдэг (дараа нь эргүүлэх өнцгийг градусаар хадгалах зориулалттай ang хувьсагч болгон ашиглах боломжтой). Энэ арга нь мөн үл хамаарах зүйлсийг зохицуулж, зургийг эргүүлдэг RotateImage функцийг ажиллуулдаг.

Хувийн Bitmap RotateImage(Bimap Image, int өнцөг) арга нь зургийг өгөгдсөн өнцгөөр эргүүлдэг. Эргүүлсэн зургийг буцаана.

Private void btnLoadImage_Click(object sender, EventArgs e) арга нь дискнээс дүрсийг PictureBox руу эх зурагтай нь ачаална.

Хувийн хүчингүй болгох timer1_Tick(объект илгээгч, EventArgs e) аргыг таймерын тэмдэг болгонд гүйцэтгэдэг. Энэ аппликешнд давтамжийг 50 миллисекунд болгож тохируулсан (хөдөлгөөнт горимд илүү жигд ажиллахын тулд).

2. 2 Хэрэглээний туршилт

Боловсруулсан программыг .NET Framework 4.5 суулгасан Microsoft Windows 7 64 бит дээр туршиж үзсэн. 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 Старовойтов В.В. Дижитал зураг: олж авахаас эхлээд

боловсруулах / V.V. Старовойтов, Ю.И. Голуб - Минск: Беларусийн OIPI NAS, 2014. - 202 х. - ISBN 978-985-6744-80-1.

2 Christian Nagel, Bill Ivien болон бусад C# 2008 болон мэргэжлийн хүмүүст зориулсан .NET 3.5 платформ - Мэргэжлийн C# 2008. - М.: Диалектик, 2008. - ISBN 978-5-8459-1458-3.

3 Microsoft платформ дээр програм хөгжүүлэлт. MSDN [Цахим нөөц]: http://msdn.microsoft.com/ru-ru/library/4f9s3at1(v=vs.110).aspx. - Хандалтын огноо: 2014.10.25.

ХАВСРАЛТ А

"frmRotationForm" ангийн жагсаалт

System.Collections.Generic ашиглах;

System.ComponentModel ашиглах;

System.Data ашиглах;

System.Drawing ашиглах;

System.Linq ашиглах;

System.Text ашиглах;

System.Threading.Tasks ашиглах;

System.Windows.Forms ашиглах;

System.Drawing.Drawing2D ашиглах;

нэрийн орон зай Image_Rotation

нийтийн хэсэгчилсэн анги frmRotationForm: Маягт

private int jj;// градусаар өнцөг

нийтийн frmRotationForm()

InitializeComponent();

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

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

jj = Convert.ToInt32(textBox1.Text);

private void btnRotateImage_Click(объект илгээгч, EventArgs e)

ang = Convert.ToInt32(textBox1.Text);

хэрэв (анг< -360 || ang > 360)

барих (Үл хамаарах тохиолдол)

MessageBox.Show("0-ээс 360 хүртэлх өнцгийг зөвшөөрнө. \n\"-\" тэмдгийг цагийн зүүний эсрэг эргүүлэхийг зөвшөөрнө.");

Bitmap i = шинэ Bitmap(pictureBox1.Image);

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

//this.Controls.Add(pictureBox1);

хувийн Bitmap RotateImage(Битмап зураг, int өнцөг)

var pi2 = Math.PI/2;//PI хоёроор

int oldWidth = Image.Width;

int oldHeight = Image.Height;

var theta = өнцөг * Math.PI / 180.0 //радиан руу хөрвүүлэх

var locked_theta = тета;

хэрэв (түгжигдсэн_тета< 0.0) locked_theta += 2 * Math.PI;

давхар шинэ өргөн, шинэ өндөр;

int nWidth, nHeight;

давхар adjacentTop, oppositeTop;

давхар adjacentBottom, oppositeBottom;

#region Шинэ өргөн, өндрийг тооцоол

давхар SINUS = Math.Abs(Math.Sin(түгжигдсэн_тета));

double COSINUS = Math.Abs(Math.Cos(түгжигдсэн_тета));

хэрэв ((түгжигдсэн_тета >= 0.0 && түгжигдсэн_тета< pi2) || (locked_theta >= Math.PI && locked_theta< (Math.PI + pi2)))

(// Өнцөг (>= 0 ба< Pi/2) или (>= PI ба< ПИ + Пи/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 = шинэ Bitmap(nWidth,nHeigth);

График g = Graphics.FromImage(rotatedBmp);

Цэг цэгүүд = шинэ Цэг ;//параллелограммыг тодорхойлсон 3 цэгийн төрлийн бүтцийн массив

//Гурван цэг нь параллелограммын зүүн дээд, баруун дээд, зүүн доод булангуудыг төлөөлдөг.

//Дөрөв дэх цэгийг эхний гурваас гаргаж авсан

//лавлагаа цэг (0,0) - зүүн дээд булан

хэрэв (түгжигдсэн_тета >= 0.0 && түгжигдсэн_тета< pi2) //90

оноо = new Point((int)oppositeBottom, 0);

өөрөөр бол (түгжигдсэн_тета >= pi2 && түгжигдсэн_тета< Math.PI) //90-180

оноо = new Point(nWidth, (int)(oppositeTop));

өөр бол (түгжигдсэн_тета >= Math.PI && түгжигдсэн_тета< (Math.PI + pi2))//180-270

оноо = new Point((int)(adjacentTop), nHeigth);

оноо = шинэ Цэг (0, (int) (зэргэлдээ доод));

оноо = new Point(nWidth, (int)(oppositeTop));

оноо = шинэ Цэг (0, (int) (зэргэлдээ доод));

оноо = new Point((int)(opositeBottom), 0);

оноо = new Point((int)(adjacentTop), nHeigth);

label6.Text = "Төв ORIGINAL x="+ (oldWidth / 2.0f).ToString() + ", y=" + (oldHeigth / 2.0f).ToString();

label7.Text = "Center ROTATE x=" + (nWidth / 2.0f).ToString() + ", y=" + (nHeigth / 2.0f).ToString();

g.DrawImage(Зураг, оноо);

g.DrawRectangle(шинэ үзэг(Өнгө.Улаан, 0.1f), шинэ тэгш өнцөгт(0,0,nWidth/2,nHeigth/2));

g.DrawRectangle(шинэ үзэг(Өнгө.Улаан, 0.1f), шинэ тэгш өнцөгт(nWidth/2, nHeigth/2, nWidth/2-1, nHeigth/2-1));

Image.Dispose();

rotatedBmp буцаах;

private void btnLoadImage_Click(объект илгээгч, EventArgs e)

OpenFileDialog dlg = шинэ OpenFileDialog();

dlg.Title = "Зураг нээх";!}

dlg.Filter = "jpg файлууд (*.jpg)|*.jpg|Бүх файл (*.*)|*.*";

хэрэв (dlg.ShowDialog() == DialogResult.OK)

pictureBox3.Image = шинэ Bitmap(dlg.OpenFile());

pictureBox1.Image = pictureBox3.Image;

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

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

private void timer1_Tick(объект илгээгч, EventArgs e)

хэрэв (checkBox2.Checked)

(//pkcherbox горимыг ZOOM болгож өөрчлөх

pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

//хэрэв тэмдэглэгээгүй бол зураг голд байрлана

pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;

хэрэв (checkBox1.Checked)

(//"хөдөлгөөнт дүрс"-ийг хэрэгжүүлэх - зургийг цагийн зүүний дагуу/цагийн зүүний эсрэг эргүүлэх

radioButton1.Visible = үнэн;

radioButton2.Visible = үнэн;

хэрэв (radioButton1.Checked)

(//цагийн зүүний дагуу

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

хэрэв (jj == 360) jj = 0;

(//цагийн зүүний эсрэг

this.btnRotateImage_Click(энэ, e);

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

хэрэв (jj == 0) jj = 359;

radioButton1.Visible = худал;

radioButton2.Visible = худал;

Үүнтэй төстэй баримт бичиг

    Зургийн дуу чимээг шүүх. Үүнийг хоёртын хэлбэрт оруулах, эргүүлэх алгоритмууд. Тэмдэглэл таних мэдээллийн шинж чанарыг бүрдүүлэх. Програм хангамжийн диаграм. Хөтөлбөрт хэрэгжсэн анги, чиг үүрэг, аргуудын тодорхойлолт. Хэрэглээний туршилт.

    курсын ажил, 2013/12/17 нэмэгдсэн

    График форматын талаархи мэдээлэл. Програмд ​​зураг хадгалах. Туслах өгөгдлийн бүтэц болох дараалал. Хоёртын файлаас зураг ачаалж байна. Зурагтай үйлдлүүд. Нарийвчлал буурах. Зургийн хэмжээг нэмэгдүүлэх.

    курсын ажил, 2013-06-29 нэмэгдсэн

    Олон улсын JPEG стандартыг ашиглан хагас өнгөт дүрсийг шахах, шахах зориулалттай программ боловсруулах. JPEG аргын тайлбар, кодыг тайлсан зураг хэлбэрээр үр дүнг гаргах. Зургийг хагас өнгөт шахах аргуудын тойм.

    курсын ажил, 2012/10/14 нэмэгдсэн

    Хоёр зургийг харьцуулах ерөнхий алгоритм. Хамгийн их талбайн арга. Гистограмын арга. Зургийг танихад бэлдэж байна. Олон хувьсагч функцийг загварчлах. Вектор тархалт. Деформацид ордог загварууд. Програм хангамжийн хэрэгжилт.

    дипломын ажил, 2008.09.29 нэмэгдсэн

    Adobe Photoshop CS6 дээр "Винни Пүүх" хүүхэлдэйн киноны дүрийн хөдөлгөөнт GIF дүрсийг бүтээх үе шатуудын тайлбар. Давхардсан зургийн давхарга үүсгэж, GIF хөдөлгөөнт дүрсэнд жааз бэлтгэх. Хөдөлгөөнт эффект болон үр дүнгийн GIF файлыг тохируулна уу.

    лабораторийн ажил, 2015.03.05 нэмэгдсэн

    Хар цагаан хагас өнгөт зургийг өнгөт болгон хувиргах зорилготой програмыг хөгжүүлэх. Зураг боловсруулах техник, мэдрэлийн сүлжээг ашиглан дүрсийг хувиргах аргуудын тойм. Өнгөний орон зайн кластерын тодорхойлолт.

    дипломын ажил, 2012 оны 06-р сарын 17-нд нэмэгдсэн

    Эргэлтийн хөдөлгөөний үед хөдөлгөөний параметрүүдийг тодорхойлох, хурд, хурдатгал, эргэлтийн өнцгөөс хамаарах хугацаа, эргэлтийн хугацааг тодорхой өнцгөөр тохируулах. Биеийн хөдөлгөөний параметрүүдийг тооцоолоход бүтээсэн математик загварыг ашиглах.

    курсын ажил, 2010 оны 03-р сарын 18-нд нэмэгдсэн

    Компьютерийн график. Пиксел, нягтрал, зургийн хэмжээ. Зургийн төрлүүд. Хар ба цагаан шугам ба хагас өнгөт зураг. Индексжүүлсэн өнгө. Бүрэн өнгөт зургууд. Файлын форматууд. Өнгө ба түүний загварууд. Өнгөний загвар: RGB, CMYK, HSB.

    хураангуй, 2009-02-20 нэмэгдсэн

    Зургийг кодлох аргууд: гүйлтийн урт кодчилол, давтамжаас хамааралтай кодчилол, Лемпел-Зив арга. 16 битийн өнгөний шугамын хэмжээ. Эх зургийн бүхэлд нь хэмжээг тооцоол. Өндөр чанартай, бага чанартай зураг шахах жишээ.

    танилцуулга, 2013/10/22 нэмэгдсэн

    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-ын эх кодууд болон хөрвүүлсэн гүйцэтгэх файлыг татаж авах боломжтой.

Програмын интерфейс.
"Нээх..." товчийг дарснаар BMP файл сонгох харилцах цонх нээгдэнэ. Зөвхөн 24 битийн палитр бүхий бит зураглалыг дэмждэг. Нээлттэй зураг цонхонд харагдана. Цонхны гарчиг нь файлын бүрэн зам болон зургийн хэмжээг харуулна.

"Өнцөг" талбарт эргэлтийн өнцгийг градусаар зааж өгнө - дурын эерэг тоо.
Бутархай тоог оруулахдаа цэг эсвэл таслалыг аравтын бутархай болгон ашиглаж болно.

"CW" ба "CCW" радио товчлуурууд нь "цагийн зүүний дагуу" ба "цагийн зүүний эсрэг" эргэлтийн чиглэлийг тус тус тохируулдаг.

"Арын өнгө" хэсэгт та зургийн хилийн пикселүүдийг холих дэвсгэрийн өнгийг тохируулж болно. Үндсэн дэвсгэр өнгө нь хар өнгөтэй байна.

"Centre X" ба "Centre Y" талбарт эргэлтийн төвийн координатыг зааж өгсөн болно. Координатын гарал үүсэл нь зургийн зүүн дээд буланд байх ба Y нь доошоо нэмэгддэг гэдгийг анхаарах хэрэгтэй. Анхдагчаар эргүүлэх төвийг ачаалагдсан зургийн геометрийн төвд тохируулсан байна.

"Эргүүлэх" товчийг дарж эсвэл Enter товчийг дарснаар дүрсийг заасан эргэлтийн төвтэй харьцуулахад тодорхой өнцгөөр эргүүлж, цонхонд харуулна. Зургийг 90°-ийн үржвэртэй өнцгөөр эргүүлэх нь хялбаршуулсан схемийн дагуу анхны зургийн пикселийн координатыг хувиргах замаар хийгддэг бөгөөд "Төв X" болон "Төв Y" утгуудыг үл тоомсорлодог.
"Эргэх" товчлуурын доор алгоритмын ажиллах хугацааг секундээр харуулна.

"Хадгалах..." товчийг ашиглан эргүүлсэн зургийг BMP файлд хадгалах боломжтой.

Хэрэв эцсийн зураг цонхонд тохирохгүй бол StretchBlt API функцийг ашиглан цонхны хил хязгаарт тохируулагдсан тул том зургийн бодит чанарыг зөвхөн хадгалсан BMP файлыг ашиглан үнэлэх боломжтой.
Зургийг өөр өнцгөөр эргүүлэхийн тулд та үүнийг дахин ачаалах шаардлагагүй - сонгосон файлын зургийг эргүүлэх бөгөөд цонхонд одоогоор харагдахгүй байна.

Дөрвөн цөмт 2.67 ГГц процессортой машин дээрх 1024 х 768 хэмжээтэй зургийг энэ программ ашиглан дурын өнцгөөр дунджаар 0.5 секундын дотор эргүүлнэ. 4000 x 4000 хэмжээтэй зураг - ойролцоогоор 10 секундын дотор. Янз бүрийн өнцөгт байгаа дүрсийг өөр өөр тооны "хэсэг" болгон хуваасан тул алгоритмын ажиллах хугацаа өөр өөр байж болно, эдгээр хэсгүүдийн талбайг тооцоолоход зарцуулсан нийт хугацаа нь өөр өөр байдаг.

Хөвөгч цэгийн форматын эцсийн зургийн пикселийн өнгөний талаарх мэдээллийг агуулсан завсрын массив нь өргөтгөсөн төрөл (10 байт) дээр хэрэгждэг тул том хэмжээний зургийг (ойролцоогоор 5000 x 5000 пикселээс дээш) боловсруулах нь санах ойн хэт их алдааг үүсгэж болзошгүй юм. Нарийвчлал багатай өгөгдлийн төрлийг ашиглаж, тооны бүхэл хэсгийг шууд эцсийн битийн зурагт хадгалах замаар туслах массив дахь зөвхөн бутархай хэсгийг үлдээснээр нөхцөл байдлыг сайжруулах боломжтой.

үр дүн

Photoshop программ дээр хэрэгжиж буй нарийвчлалын алгоритм болон дүрсийг эргүүлэх алгоритмын үйлдлийн харьцуулсан шинжилгээг хийцгээе.

Туршилт 1

Эхний туршилтын хувьд би маш энгийн зураг авсан - 100 х 100 пикселийн хэмжээтэй цагаан дөрвөлжингийн төвөөс 1 пикселийн зузаантай, 10 пикселийн урттай хэвтээ хар шугам.

Үүний дараа би энэ зургийг геометрийн төвтэй харьцуулахад цагийн зүүний дагуу 3 ° эргүүлэв. Харьцуулсан үр дүн (24x томруулсан):

Нарийвчлалын алгоритм

Photoshop CS6 (64 бит)
Мэдээжийн хэрэг, Photoshop алгоритм нь зураг дээр тодорхой гажуудлыг бий болгодог. Өнгөрсөн 10 жилийн хугацаанд Photoshop дээр хэрэгжүүлсэн эргүүлэх алгоритм нь мэдэгдэхүйц өөрчлөлт ороогүй гэдгийг бид тэмдэглэж байна.

Туршилт 2

Хоёр дахь туршилтын хувьд би стандарт Win7 түгээлтээс Tulip-ийг сонгосон.

Энэ зургийг геометрийн төвтэй харьцуулахад цагийн зүүний дагуу 5 ° эргүүлсний дараа би бүх пикселийн өнгийг RGB сувгаар нэгтгэв. Нарийвчлалын алгоритм болон Photoshop алгоритмын үр дүн энд байна:

Хаалтанд байгаа тоонууд нь энэ үзүүлэлтийн анхныхаас үнэмлэхүй хазайлтыг харуулж байна.
Нарийвчлалтай эргүүлсний дараа болон бөөрөнхийлөхөөс өмнө зургийн өнгө бараг өөрчлөгдөөгүй - үүнийг хүлээж байсан.
Энэ тохиолдолд хамгийн том хазайлт нь Photoshop алгоритмын G сувгаас олддог. Хувиараа энэ хазайлт нь ердөө 0.06% байгаа тул "нүдээр" мэдэгдэхүйц биш боловч төгс төгөлдөр байдлын үүднээс Photoshop-ийн үр дүн нарийвчлалын алгоритмаас муу байна.
Нарийвчлалын алгоритм дахь пиксел бүрийн өнгийг BMP форматад шаардагдах бүхэл тоонд дугуйлах нь зарим өнгөт мэдээллийг эргэлт буцалтгүй устгадаг гэдгийг анхаарах нь чухал юм.

Хоёр алгоритмыг харааны харьцуулахын тулд би зургийн томруулсан хэсгийг өгөх болно.

цагийн зүүний дагуу 5° эргүүлэх, Photoshop:

ба нарийн алгоритм:

Харьцуулсан дүн шинжилгээ нь Photoshop нь зургийн тодосгогч элементүүдийг хадгалахад илүү сайн гэдгийг харуулж байгаа боловч үүнтэй зэрэгцэн гажиг өнгөний "цагаан гэрэл" үүсгэдэг. Нарийвчлалын алгоритм нь өнгийг гажуудуулдаггүй, гэхдээ тэр үед дүрсийг бага зэрэг бүдгэрүүлдэг.

дүгнэлт

1. Нарийвчлалтай, нэгэн зэрэг растер дүрсийг дурын өнцгөөр харьцангуй хурдан эргүүлэх боломжтой. Мэргэжлийн график засварлагчид яагаад хэрэглэгчдэд зургийг арай илүү хугацаанд маш нарийвчлалтайгаар эргүүлэх боломж олгодоггүй нь миний хувьд нууц хэвээр байна.

2. авч үзсэн алгоритмын хэт нарийвчлалыг үл харгалзан зургийн урвуу хувиргалт, i.e. Өнгөний тодорхой утгыг (хөвөгч цэгийн форматаар) дугуйлах нь зарим өнгөт мэдээллийг эргэлт буцалтгүй устгадаг тул чанарыг алдалгүйгээр эсрэг өнцөг рүү эргүүлэх боломжгүй юм.

3. Ялгаатай нарийн ширийн зүйлийг нүдээр харах үүднээс хамгийн сайн үр дүнг оновчтой бус алгоритмаар олж авдаг. Зургийн өнгөний талаархи хамгийн их мэдээллийг хадгалах нь чухал тохиолдолд нарийвчлалын алгоритмыг ашиглах нь утга учиртай юм.



Танд нийтлэл таалагдсан уу? Найзуудтайгаа хуваалцаарай!