Pasukite figūrą 45 laipsnių kampu. Koks yra sukimosi kampas?

Kampas tekinimo reiškia pagrindinį fizinį dydį, apibūdinantį kūno ar pluošto judėjimą, kai vienas iš jo taškų nejuda. Atitinkamai, šis kampas nustatomas tiksliai, palyginti su fiksuotas taškas. Ši vertė turi savo vienetą ir matmenis.

Instrukcijos

IN šiuolaikinė fizika Sukimosi kampas, kaip fizikinis dydis, įvertinamas plokštumos kampo vienetais. Plokštumos kampo vertei nustatyti? naudokite matematikoje priimtas lygtis. IN šiame kontekste galite naudoti vieną iš dviejų toliau pateiktų parinkčių. = s/RČia s reiškia apskritimo lanko ilgį, o R yra apskritimo spindulio ilgį.

Antrojo sujungimo atveju vienas iš pusapvalių yra standžiai sujungtas su mova. Dėl lakštinių spyruoklių elastingumo dvi įvorės dabar gali suktis radialiai viena kitos atžvilgiu. Trijų dalių sujungimo atveju viena iš rankovių vėl padalinama, todėl uždedama ant vienos pusės apvalkalo, kurios viduryje yra nedaloma įvorė. Ši konstrukcija yra stabilesnė, tačiau jai reikia dviejų išorinių atraminių blokų. Vidurinė dalis gali laisvai judėti išorinių siaurų pečių atžvilgiu atitinkamo sukimosi kampo srityje.

Antrasis būdas yra naudoti atvirkštinę lygtį trigonometrinė funkcija, kuris atrodo taip: ? = arctan (a/b), kur b ir a yra ne kas kita, kaip atitinkami stačiojo trikampio kojų ilgiai.

Vertinant sukimosi kampą naudojant matematines sąlygas, fizikoje daromas vienas subtilus pakeitimas, tačiau toks požiūris savo ruožtu turi tam tikrų pasekmių. Faktas yra tas, kad bandant įvertinti besisukančio kūno sukimosi kampą, praktiškai įvertinamas bet kurio šio kūno taško skritimo lanku nueitas kelias, o tai yra vieno fizikinio dydžio pakeitimas kitu, būtent šiuo konkrečiu atveju sukimosi judėjimo forma pakeičiama orbitaline.

Kaip jau minėta, skersinė spyruoklinė jungtis yra cilindrinis guolis, skirtas sukimosi judesiams su ribotu sukimosi kampu. Nelankstumas jėgoms, veikiančioms radialine ir ašine kryptimis, yra gana didelis. Sukimo standumas 10 įvairių dydžių Galima pasirinkti tris spyruoklių storius pagal ±15°, ±7,5° ir ±3,7° sukimosi kampus. Išsami informacija informacija apie turimas serijas pateikiama atitinkamoje apžvalgoje.

Vėl ir vėl kyla dirginimas dėl sukimosi kampo. Jei anksčiau vardinis sukimosi kampas buvo žymimas 30°, 15° ir 7,5°, dabar jis žymimas 15°, 7,5° ir 3,7°. Geometrija ir spyruoklės nepasikeitė, tik pagal apibrėžimą. Jei anksčiau ėjote nuo didžiausio galimo sukimosi kampo, tai šiandien daugiau kalbame apie begalinės gyvenimo trukmės kampą.

Šiuolaikinėje fizikoje sukimosi kampo matavimo vienetas laikomas „rad“. Šiuolaikinėje fizikoje vis dar gana sunku rasti prieštaringesnę temą nei klausimas, ar sukimosi kampas yra bematis, ar matmenų, išvestinė ar pagrindinis dydis.

Tačiau vis dar lieka klausimų, iš kurių pagrindiniai yra šie: kodėl fizikoje nėra lygties, kuri nustatytų sukimosi kampą pagal pagrindinį fiziniai kiekiai, jei tai išvestinis fizikinis dydis, kodėl sukimosi kampas turi savo matavimo vienetą SI, jei paprastai jis laikomas bedimensiniu dydžiu.

Paprastai kryžminių jungčių elastingumas, spyruoklės konstanta ir tarnavimo laikas nepriklauso nuo sąlygų aplinką. Taip pat nešvarumai ir dulkės neturi įtakos jungties ribose, nebent tai būtų chemiškai agresyvios medžiagos. Daugiau dulkės, žinoma, gali įstrigti sąnaryje ir trukdyti jo judėjimui. Ekstremalios temperatūros gali turėti įtakos eksploatavimo trukmei, ypač kai šiluma ir drėgmė kartu sukelia koroziją. Tokiais atvejais reikia pasirinkti specialią siūlių medžiagą arba paviršiaus apsaugą.

Periodiškas vėsinimas ir šildymas šioje srityje neturi jokios įtakos neigiamą įtaką pagal funkciją. Stabilumas veikiant statinėms jėgoms priklauso nuo jėgos vektoriaus krypties lakštinių spyruoklių atžvilgiu. 2 paveiksle parodytos jėgų rūšys, kurios gali būti taikomos kaukolės sąnariui.


Dėmesio, tik ŠIANDIEN!

Viskas įdomu

Pagal lenktos linijos apibrėžimą analitinė geometrija tai reiškia tam tikrą taškų rinkinį. Jei kuri nors tokių taškų pora yra sujungta atkarpa, ją galima pavadinti styga. Už aukščiausiojo švietimo įstaigų dažniausiai manoma...

Nubrėžę du skirtingus spindulius bet kuriame apskritime, jame nurodysite du centrinius kampus. Šie kampai atitinkamai nustatys du apskritimo lankus. Kiekvienas lankas, savo ruožtu, bus apibrėžtas dviem stygomis, dviem apskritomis atkarpomis ir dviem sektoriais. Matmenys…

Sukimosi kampas matuojamas nuo jungties nulinės padėties. Tvist gali gulėti iš abiejų pusių arba iš vienos pusės iki nulinis taškas. Vairavimo kampas tiesiogiai veikia lakštinių spyruoklių medžiagos įtempimą. Kiekvieno guolio arba lanksčios jungties numatomas tarnavimo laikas paprastai yra didžiausias svarbus turtas. Jį lemia medžiagos įtempimas lakštinėse spyruoklėse dėl apkrovos ir pasukimo kampo. 3 paveiksle parodyta tipiška priklausomybė tarp apkrovos, sukimosi kampo ir tarnavimo laiko.

Turi šias charakteristikas skirtinga prasmė priklausomai nuo taikymo. Jie taip pat turi mažesnį poveikį pačiai X jungčiai nei įrenginiui, prie kurio prijungta jungtis. Lakštinių spyruoklių atkūrimo momentas, padalytas iš sukimosi kampo, vadinamas spyruoklės konstanta. Jie gali būti matuojami statiškai arba dinamiškai. Jis turi įtakos rezonansiniam dažniui, kuriuo vibruoja masė, pritvirtinta prie skersinės spyruoklės jungties laisvojo galo.

Žodis „kampas“ turi skirtingas interpretacijas. Geometrijoje kampas yra plokštumos dalis, kurią riboja du spinduliai, sklindantys iš vieno taško – viršūnės. Kada mes kalbame apie apie tiesius, aštrius, neišskleistus kampus, tada jie tiksliai reiškia...

Plokštuminis trikampis Euklido geometrijoje sudarytas iš trijų kampų, sudarytų iš jo kraštinių. Šių kampų dydį galima apskaičiuoti keliais būdais. Dėl to, kad trikampis yra viena iš paprasčiausių figūrų, yra paprastos skaičiavimo formulės...

Spyruoklės konstanta priklauso nuo jungtį veikiančių jėgų dydžio ir krypties. Spyruoklės konstanta didėja didėjant vertikaliai apkrovai, kai spyruoklės yra spaudžiamos. Kita vertus, spyruoklių konstanta mažėja didėjant vertikaliai apkrovai, kai spyruoklės yra įtemptos. Šiuo reiškiniu kartais galima pasiekti ypač mažą savirezonansą.

Tada jungtis sukonstruota taip, kad radialinės jėgos sustiprintų spyruokles pratęsimo kryptimi, kad būtų sumažinta spyruoklės konstanta. 4 pav. Spyruoklės konstanta kaip radialinės apkrovos funkcija. Šiame apkrovos diapazone nerekomenduojama naudoti skersinių jungčių, nes lakštinės spyruoklės gali sulinkti.

Apibūdinti kūnų judėjimą sudėtinga trajektorija, įskaitant apskritimą, kinematikoje kampinio greičio sąvokos, kampinis pagreitis. Pagreitis apibūdina pokyčius kampinis greitis kūnus laiku. Daugelyje kinematografinių…

Lankas yra uždaros kreivės dalis, kuri sudaro apskritimą. Jei iš apskritimo centro sudarysime kampą, kurio spinduliai kirs apskritimą taškuose, kurie sutampa su lanko galais, tada nurodytas kampas bus svarstoma centrinis kampas lankai. ...

Horizontali apkrova taip pat keičia spyruoklės konstantą taip, kad 4 paveiksle pateiktos kreivės juda žemyn į kairę. Jungtys, pažymėtos 10, turi ploniausias spyruokles, todėl turi mažiausią vieno dydžio spyruoklės konstantą. Jungtys, pažymėtos 20, turi vidutinę spyruoklę, taigi ir didesnę spyruoklės konstantą, o jungtys, pažymėtos 30, turi stipriausias spyruokles ir kiekviena turi didžiausią tokio paties dydžio spyruoklės konstantą.

Spyruoklės konstanta išlieka beveik pastovi per visą sukamąjį judesį. Įvorės konfigūracija neturi įtakos spyruoklės konstantai. Paprastai spyruoklės konstanta pateikiama su 10 % tolerancija. Tiesiškumas atsiranda dėl skersinių spyruoklių jungties geometrijos. Visiškai linijinė jungtis turėtų padidinti sukimo momentą visiškai tiesiškai virš vairo kampo. Praktiškai netiesinis elgesys rodomas tik esant didesniems nei vardinis sukimosi kampas.

DVIGUBAI ATRAMĖTO SPĖLIO SKYRIUS NUSTATYMO IR PASUKIMO KAMPO NUSTATYMAS TIESIOGINIO LENKIANT

Darbo tikslas: Eksperimentiškai nustatykite sijos sekcijos įlinkio dydį ir sukimosi kampą ir palyginkite juos su teoriniais skaičiavimais gautomis reikšmėmis.

TRUMPA TEORINĖ INFORMACIJA

Veikiant išorinėms jėgoms, sija deformuojasi taip, kad jos išilginė ašis sulenkta. Lenkta sijos ašis vadinama elastine linija. Sijų skerspjūvių judėjimas lenkimo metu apibūdinamas dviem dydžiais: deformacija Y ir sukimosi kampas .

Centrinis poslinkis – tai momentinės sukimosi ašies erdvinis poslinkis. Poslinkio dydis priklauso nuo pačios jungties geometrijos ir nuo išorinių radialinių jėgų įtakos. Poslinkis yra labai mažas, todėl dažniausiai jo galima nepaisyti. Fig. 7 pav. Centro poslinkis kaip sukimosi kampo funkcija.

Histerezė – tai nulinio taško poslinkis dėl spyruoklinės medžiagos elastingumo po teigiamo arba neigiamo jungties sukimo. Skirtumas tarp nulinės padėties po ankstesnio teigiamo ir padėties po neigiamo sukimosi yra histerezės kampas.

Žemiau pateikiamos kai kurių sijų tvirtinimo ir apkrovos schemų deformacijos vertės. Teorinę įlinkių ir sukimosi kampų vertę galima nustatyti bet kuriuo žinomu metodu.

Schema 1. Sija ant dviejų atramų, per vidurį apkrauta sutelkta jėga, įsriegiama į t.S.

Nukrypimas taške t.C

Sukimosi kampai ant atramų taškuose A ir B

Tai yra keli tūkstančiai ankstesnių posūkių. Tipinės išmatuotos vertės parodytos 9-9 paveiksluose. 9 pav. Kryžminių jungčių, kurių vardinis sukimosi kampas yra ±3,7°, histerezės kreivės 11 pav. Kryžminių jungčių, kurių vardinis sukimosi kampas yra ±15°, histerezės kreivės 10 pav. Kryžminių jungčių, kurių vardinis sukimosi kampas yra ±7,5°, histerezės kreivės.

Priklausomai nuo skersinių spyruoklių konfigūracijos, spyruokles veikia skirtingos apkrovos. Žemiau yra keletas konstruktyvius sprendimusįprastos versijos kryžminių jungčių įrengimui. Esant vibracijai, rekomenduojama naudoti vieną iš įprastų varžtų tvirtinimo būdų. Įtampa gali būti sumažinta įrengiant plyšį su skylute, kaip parodyta punktyrine linija, priešais užveržimo varžtą.

Schema 2. Sija ant dviejų atramų, apkrauta dviem sutelktomis jėgomis.

Nukrypimas taške C arba D

Sukimosi kampas ant atramų

Šį išdėstymą galima pasirinkti mažo sukimo momento darbams. Suspaudimo jėga turi būti pakankamai didelė, kad skylėje nesusisuktų. Kad būtų lengviau įkišti jungtį į skylę, tarpas turi būti atskirtas. Reikia pasirūpinti, kad nebūtų viršyta elastingumo riba.

Montavimas su radialiniu kaiščiu

Šiame įrenginyje fiksavimas atliekamas naudojant srieginį kaištį. Norint išvengti skersinės siūlės deformacijos, rekomenduojama atsargiai priveržti varžtą. Kai atsiranda vibracija, varžtas turi būti pritvirtintas. Gręžimas ir lašinimas po surinkimo. Apdorojant spyruokles negalima liesti.

Schemos Z,4. Sija ant dviejų atramų su konsolėmis, apkrauta koncentruota jėga konsolės gale.

Nukrypimas konsolės gale

Nukrypimas tarpatramio viduryje

Sukimosi kampas taške A

Montavimas su nustatymo kaiščiu skersine ir ašine kryptimis

Paspaudę sulenkite jį kreipiančiąja mova ir užfiksuokite. Gręžimo metu nepažeiskite jungties vidinės sienelės. Fiksavimui naudojamas slėgis arba kaiščiai. Panardinus jungtį į „sausą ledą“, susitraukimas gali būti sukeltas nepažeidžiant. Atitinkama atraminė dalis gali būti šildoma, kad būtų išplėsta skylė. Kad nesugadintumėte surinkimo metu, prašome specialus įrankis kaip parodyta paveikslėlyje. Dirbame su įprastu kvadratiniu arba trikampiu tinkleliu.

15 pav. Sijos apkrovos schemos

Sukimosi kampas ties atrama t.A

;

Priimtini simboliai formulėse:

Y- įlinkis (skerspjūvio svorio centro judėjimas sijos ašiai statmena kryptimi);

Kvadratinis tinklelis ir trikampis tinklelis. Šiam tinkleliui taikomas afininis atvaizdavimas. Ekrano tinklelis ir tinklelis atrodo uždengti. Truputis vertimo veda į šešėlį. Atsiras nedidelis sukimasis. Pristatome tinklelio prototipą ir tinklelius lygiagrečiose, vertikaliose plokštumose. Jei žiūrime iš tam tikro atstumo, kaip perspektyvos rezultatą atpažįstame naują modelį. Toliau pateiktose nuotraukose mes esame keturis kartus didesnis atstumas tarp dviejų plokštumų priešais priekinę plokštumą. Atitinkami priekiniai taškai.

Taškai aiškiai nupiešti. Perdengimas mėlyna ir raudona suteikia violetine spalva. Atpažįstame kvadratinį ir trikampį sutampančių taškų tinklelį. Sukant 45° kampu nėra tikslaus dviejų tinklelio taškų, esančių už sukimosi centro, persidengimo, nors atrodo maždaug taip. Taip yra todėl, kad tai neracionalus skaičius.

R- jėga, taikoma sijai;

l - sijos ilgis;

E - 1-osios rūšies tamprumo modulis;

- sijos skerspjūvio ašinis inercijos momentas neutralios ašies atžvilgiu.

Įranga ir pavyzdžiai

Tiriant dviejų atramų sijos lenkimą, naudojama SM-4A instaliacija.

Ant dviejų šarnyrinių atramų sumontuota stačiakampė sija (6  40) mm.

Tolesnės tikslios perdangos gaunamos pridedant ruožą su daugikliu, kuriame yra. Kitas pavyzdys- tempimo koeficientas. Matome kvadratinį tinklelį su perdanga, kurios tinklelio plotis yra 3, palyginti su pradiniu mėlynu tinkleliu. Remiantis raudonu tinkleliu, tinklelio įstrižainės ilgis yra dabar.

Sukimasis su mažu tempimu. Tiesiogiai su tempimo koeficientu. Analoginis efektas gaunamas sukant trikampį tinklelį 30° aplink tinklelio tašką. Esant tempimui aplinkui, t.y. apie 1%, yra tikslūs necentriniai sutapimai – kur jie yra?

Judantis stovas leidžia reguliuoti tarpatramio ilgį nuo 700 iki 1000 mm, taip pat gauti konsolinę siją.

Pavyzdžio etaloninių sekcijų įlinkių ir sukimosi kampų matavimas atliekamas naudojant ciferblato indikatorius, kurių padalijimo vertė yra 0,01 mm. Nuokrypių matavimo indikatoriai montuojami ant indikatorių stovų, kurie gali judėti išilgai įrenginio pagrindo išilgai kreiptuvo. Stovas pritvirtinamas prie kreiptuvo naudojant kamštį. Posūkio kampai matuojami naudojant prie sijos pritvirtintas svirtis – indikatorius, kurie jaučia svirčių judėjimą.

Tačiau taip jau yra su tempimo faktoriumi – nesvarbu, koks jis didelis. Ar galime gauti tikslias perdangas be tempimo, t.y. su gryna rotacija? Toliau pateiktame paveikslėlyje parodytas sukimosi kampas. Atpažįstame pasvirusią kvadratinę perdangos tinklelį, kurio plotis tinklelis ir nuolydis, priešingas horizontaliai.

Visi žinome dešinįjį trikampį su kateterio ilgiu ir hipotenuzės ilgiu. Toks ypatingas stačiųjų trikampių su visu ilgiu kateteriais ir visu ilgiu hipotenuze vadinami Pitagoro trikampiais. Tačiau mūsų sukimosi kampas yra šio trikampio kampas su kateterio ilgiu ir hipotenuzės ilgiu. Tiesą sakant, tokį trikampį galime įdėti į savo tinklelį.

BANDYMO PROCEDŪRA

Kadangi pjūvio sukimosi kampai tampriųjų deformacijų metu yra maži, priimame

, Tada

arba

Bet kadangi mes tik sukamės, o ne tempiame, tinklelio plotis yra vienodas abiejose akyse. Matome, kad apskritimas ir trikampio apskritimas taip pat eina per kelis tinklelio taškus. Sukant raudoną tinklelį galime įdėti ir trečią tinklelį. Šio žalios spalvos modelio vaizdas parodytas kitame paveikslėlyje.

Tikslios visų trijų tinklelių perdangos sudaro pasvirusią kvadratinę tinklelį, kurio plotis yra 5. Šis naujas tinklelis yra nuožulnus. Taigi stačiojo trikampio hipotenuzės kvadratas yra šio naujo rastro rastrinis kvadratas. Žinoma, jis taip pat telpa į raudoną tinklelį, nes turime Pitagoro trikampį. Du kojų kvadratai telpa į originalų mėlyną tinklelį.

čia S yra indikatoriaus rodmuo, mm;

a – svirties ilgis, matuojamas nuo neutralaus bandinio sluoksnio iki indikatoriaus veleno ašies, mm (a=150mm);

 - pjūvio sukimosi kampas, rad.

    Norėdami gauti tikslesnius rezultatus, testą pakartokite tris kartus. Nukrypimo dydis ir sukimosi kampas nustatomi kaip matavimų aritmetinis vidurkis.

    Įveskite testo rezultatus į lentelę.

    Apskaičiuokite teorinė vertėįlinkiai ir sukimosi kampai toms pačioms sijos sekcijos apkrovos sąlygoms, kurioms buvo atlikti eksperimentiniai matavimai.

    Naudodami formules nustatykite teorinių skaičiavimų paklaidą.



ATASKAITOS RENGIMAS

Ataskaitoje apie atliktus darbus turi būti pateiktas įrengimo eskizas, projektinė schema, eksperimentinio įlinkių ir sukimosi kampų nustatymo rezultatai, teoriniai įlinkių ir sukimosi kampų skaičiavimai; eksperimentiniu ir teoriniu būdu gautų rezultatų palyginimas.

TESTO KLAUSIMAI

    Kokia yra sijos tamprioji linija?

    Kokios yra sijų deformacijos lenkimo metu?

    Apskaičiuokite didžiausius sijų įlinkius pagal 1, 2, 3 schemas.

    Toms pačioms sijų schemoms apskaičiuokite atramų sukimosi kampus.

    Kiek kartų pasikeis sijos įlinkis, jei apkrova bus sumažinta perpus?

    Sijos yra pagamintos iš plieno ir ketaus, turi vienodus matmenis ir yra veikiamos tomis pačiomis jėgomis, kurios sijos įlinkis bus didesnis?

    Kokiu tikslumu galite išmatuoti įlinkį naudodami indikatorių?

1 lentelė

Deformacijos apibrėžimas

Sukimosi kampo nustatymas

Įlinkio indikatoriaus rodmenys, mm

Patyręs įlinkis, mm

Teorinis įlinkis, mm

Santykinė klaida

Sukimosi kampo indikatoriaus rodymas, m

Patirtas sukimosi kampas,  op

Teorinis sukimosi kampas,  t

Santykinė klaida



Kur P 0 yra išankstinė apkrova, kuri atitinka nulinę indikatoriaus reikšmę.

P 1, P 2, P 3 – tos pačios vertybės apkrovos prieaugiai.

Prenumeruokite naujienas


ĮVADAS. PROBLEMOS PAREIŠKIMAS.

1. VAIZDO SUKIMO ALGORITMO APRAŠYMAS

2. TAIKYMO KŪRIMAS C# PROGRAMAVIMO KALBA

2.1 Programos aprašymas

2.2 Programos testavimas

IŠVADA

NAUDOTŲ ŠALTINIŲ SĄRAŠAS

A PRIEDAS

ĮVADAS. PROBLEMOS PAREIŠKIMAS

Atliekant disciplinos „Vaizdų gavimas ir apdorojimas“ tyrimą, kaip testą, buvo iškelta užduotis aprašyti algoritmą ir įgyvendinti vaizdo pasukimo aplink centrą vartotojo nurodytu kampu funkciją. Vieną kartą apskaičiuokite kampo kosinusą ir sinusą. Savavališkai nustatykite visus pradinius parametrus ir patikrinkite, ar jie atitinka priimtinų verčių diapazoną.

1 . Vaizdo pasukimo algoritmo aprašymas

Norėdami pasukti vaizdą kampu, nurodytu laipsniais, naudokite privačią Bitmap RotateImage (Bitmap Image, int kampas) funkciją.

Įvesties parametrai:

Bitmap Image – vaizdas pasukamas;

int kampas – sukimosi kampas laipsniais.

Funkcija grįžta pasukta nurodytas kampas vaizdas.

Funkcijos algoritmas:

1) Įvestis yra vaizdas ir sukimosi kampas laipsniais;

2) Apskaičiuokite sukimosi kampo sinusus ir kosinusus (vieną kartą). Sukimosi kampas nurodomas radianais;

3) Apskaičiuokite naują vaizdo plotį ir aukštį naudodami apskaičiuotą sukimosi kampo sinusą ir kosinusą;

4) Taškinio šaudymo galerijos struktūrų masyvo inicijavimas (Taškas = naujas taškas), apibrėžiantis lygiagretainį.

5) Priklausomai nuo sukimosi kampo (kuriame ketvirtyje jis yra radianais), apskaičiuojamos koordinatės trys taškai sukurti naują įvaizdį. Koordinatės apskaičiuojamos pagal (3) tašką. šio algoritmo(naujas plotis ir aukštis – taškų X ir Y koordinačių perskaičiavimas);

6) Pasukto vaizdo braižymas naudojant tris taškus (viršutinis kairysis, viršutinis dešinysis ir apatinis kairysis lygiagretainio kampai. Ketvirtasis taškas ekstrapoliuojamas remiantis pirmaisiais trimis).

g.DrawImage(Vaizdas, taškai); - piešimo funkcija.

7) Grąžinkite pasuktą vaizdą, kad galėtumėte naudoti ne šiai funkcijai.

Vaizdo centravimą atlieka elemento ypatybė pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;

2 . TAIKYMO KŪRIMAS C# PROGRAMAVIMO KALBA

Vaizdų apdorojimo programos kūrimo įrankiu pasirinkta MS Visual Studio 2012 programavimo kalba. Šis įrankių rinkinys suteikia pakankamai galimybių dirbti su grafika.

Pagal užduotį buvo sukurta aplikacija.

2. 1 Programos aprašymas

pasukti vaizdo kampų diapazoną

Programa yra pagrįsta frmRotationForm klase.

IN ši klasėĮgyvendinami šie metodai:

Privatus void btnRotateImage_Click(objekto siuntėjas, EventArgs e) metodas tvarko spustelėjus mygtuką „Pasukti vaizdą“. Paspaudus bandoma teksto lauko turinį konvertuoti į skaičių (vėliau naudoti kaip ang kintamąjį, kuris skirtas saugoti sukimosi kampą laipsniais). Taip pat į šis metodas Apdorojamos išimtys ir paleidžiama RotateImage funkcija, kuri pasuka vaizdą.

Privatus Bitmap RotateImage (Bitmap Image, int kampas) metodas pasuka vaizdą tam tikru kampu. Grąžina pasuktą vaizdą.

Privatus void btnLoadImage_Click(objekto siuntėjas, EventArgs e) metodas įkelia vaizdą iš disko į PictureBox su pradiniu vaizdu.

Privatus void timer1_Tick(objekto siuntėjas, EventArgs e) metodas vykdomas kiekvienam laikmačio žymėjimui. IN šią programą dažnis nustatytas 50 milisekundžių (kad būtų sklandesnis darbas animacijos režimu).

2. 2 Taikymo testavimas

Sukurta programa buvo išbandyta Microsoft Windows 7 64 bitų operacinėje sistemoje su įdiegta .NET Framework 4.5. Vykdomojo failo Image_Rotation.exe paleidimo rezultatas parodytas 2.1 pav.

2.1 pav. Programos langas paleidžiant

Kai paleidžiu programą, numatytasis vaizdas, kurį pasirinkau, yra „laidinis“. Jį galite pakeisti spustelėdami mygtuką „Įkelti vaizdą“. Savo atvaizdo pasirinkimo rezultatas pateiktas 2.2 pav.

2.2 pav. Savo vaizdo pasirinkimas pasukimui

Tolesni veiksmai aptariami numatytame paveikslėlyje. Pasirinkę pasukimo kampą atitinkamame teksto laukelyje viršutiniame kairiajame formos kampe, spustelėkite mygtuką „pasukti vaizdą“. (žr. 2.3 pav.).

2.3 pav. Vaizdo pasukimo 8 laipsniais rezultatas

Paveiksle aprašyti stačiakampiai yra pagalbinis įrankis, jie rodomi jūsų patogumui ir rodo vaizdo centrą.

Programa įgyvendina „apsaugą nuo kvailių“, būtent: jei bandote įvesti kampą, didesnį nei 360 laipsnių arba mažesnį nei -360 laipsnių, taip pat tekstą, rodomas įspėjimas ir vaizdas nebus apdorotas:

2.4 pav. – Bandymas pasukti vaizdą -361 laipsniu

Programoje įdiegta galimybė „animuoti sukimąsi“ pagal laikrodžio rodyklę / prieš laikrodžio rodyklę, taip pat „didinti“ (padidinti paveikslėlį, kad jis tilptų į „PictureBox“ konteinerį).

2.5 pav. Animuotas sukimas

IŠVADA

Užduotis nustatyta technines užduotisĮ bandomasis darbas, įgyvendinta.

Studijavo vaizdo apdorojimo būdus naudojant C# programavimo kalbą.

Programos šaltinio kodas pateiktas A priede.

NAUDOTŲ ŠALTINIŲ SĄRAŠAS

1 Starovoitovas V.V. Skaitmeniniai vaizdai: nuo gavimo iki

apdorojimas / V.V. Starovoitovas, Yu.I. Golub - Minskas: Baltarusijos OIPI NAS, 2014. - 202 p. - ISBN 978-985-6744-80-1.

2 Christian Nagel, Bill Ivien ir kiti.

3 Programų kūrimas Microsoft platformoje. MSDN [ Elektroninis šaltinis]: http://msdn.microsoft.com/ru-ru/library/4f9s3at1(v=vs.110).aspx. - Priėjimo data: 2014-10-25.

A PRIEDAS

Klasės "frmRotationForm" sąrašas

naudojant System.Collections.Generic;

naudojant System.ComponentModel;

naudojant System.Data;

naudojant System.Drawing;

naudojant System.Linq;

naudojant System.Text;

naudojant System.Threading.Tasks;

naudojant System.Windows.Forms;

naudojant System.Drawing.Drawing2D;

vardų erdvė Image_Rotation

viešoji dalinė klasė frmRotationForm: Forma

privatus int jj;//kampas laipsniais

vieša frmRotationForm()

InitializeComponent();

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

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

jj = Convert.ToInt32(textBox1.Text);

private void btnRotateImage_Click(objekto siuntėjas, EventArgs e)

ang = Convert.ToInt32(textBox1.Text);

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

sugauti (išimtis, išskyrus)

MessageBox.Show("Leidžiami kampai nuo 0 iki 360. \nŽenklui \"-\" leidžiama suktis prieš laikrodžio rodyklę.");

Bitmap i = new Bitmap(pictureBox1.Image);

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

//this.Controls.Add(pictureBox1);

privatus bitmap RotateImage (Bitmap vaizdas, vidinis kampas)

var pi2 = Math.PI/2;//PI po du

int oldWidth = Vaizdas.Plotis;

int oldHeight = Vaizdas.Aukštis;

var teta = kampas * Math.PI / 180.0 //konvertuoti į radianus

var locked_theta = teta;

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

dvigubas naujasPlotis, naujas Aukštis;

int nPlotis, nAukštis;

double gretimasViršus, priešingasViršus;

double gretimasApačia, priešingaBottom;

#region Apskaičiuokite naują plotį ir aukštį

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

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

if ((užrakintas_teta >= 0,0 && užrakintas_teta< pi2) || (locked_theta >= Math.PI && locked_theta< (Math.PI + pi2)))

(// Kampas (>= 0 ir< Pi/2) или (>= PI ir< ПИ + Пи/2)

šalia viršus = COSINUS * oldWidth;

PriešingaTop = SINUSAS * oldWidth;

nextBottom = COSINUS * oldAukštis;

PriešingaBottom = SINUSAS * oldAukštis;

gretimasViršus = SINUSAS * oldAukštis;

PriešingaTop = COSINUS * oldAukštis;

nextBottom = SINUS * oldWidth;

PriešingaiBottom = COSINUS * oldWidth;

newWidth = gretimasViršus + priešingaApačia;

newHeigth = gretimasApačia + priešingaViršus;

nWidth = (int)(Math.Ceiling(newWidth));//apvalinti iki sveikųjų skaičių

nAukštis = (int)(Math.Ceiling(newHeigth));

#endregion Apskaičiuokite naują plotį ir aukštį

Bitmap rotatedBmp = new Bitmap(nWidth,nHeigth);

Grafika g = Graphics.FromImage(rotatedBmp);

Taškiniai taškai = naujas Taškas ;//3 taško tipo struktūrų masyvas, apibrėžiantis lygiagretainį

//Trys taškai žymi: viršutinį kairįjį, viršutinį dešinįjį, apatinį kairįjį lygiagretainio kampus.

//Ketvirtasis taškas ekstrapoliuojamas iš pirmųjų trijų

//atskaitos taškas (0,0) - viršutinis kairysis kampas

if (užrakintas_teta >= 0,0 && užrakintas_teta< pi2) //90

taškai = new Taškas((int)priešaisBottom, 0);

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

taškai = naujas Taškas(nPlotis, (int)(priešaisViršus));

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

taškai = naujas Taškas((int)(greta esantisViršus), nAukštis);

taškai = new Point(0, (int)(greta apačia));

taškai = naujas Taškas(nPlotis, (int)(priešaisViršus));

taškai = new Point(0, (int)(greta apačia));

taškai = new Taškas((int)(priešais apačioje), 0);

taškai = naujas Taškas((int)(greta esantisViršus), nAukštis);

label6.Text = "Centras ORIGINALUS x="+ (oldWidth / 2.0f).ToString() + ", y=" + (oldAukštis / 2.0f).ToString();

label7.Text = "Centras ROTATE x=" + (nWidth / 2.0f).ToString() + ", y=" + (nAukštis / 2.0f).ToString();

g.DrawImage(Vaizdas, taškai);

g.DrawStačiakampis(naujas rašiklis(spalva.raudona, 0.1f),naujas stačiakampis(0,0,nplotis/2,naukštis/2));

g.DrawStačiakampis(naujas rašiklis(spalva.raudona, 0,1f), naujas stačiakampis(nplotis/2, naukštis/2, n plotis/2-1, n aukštis/2-1));

Vaizdas.Dispose();

return rotatedBmp;

private void btnLoadImage_Click(objekto siuntėjas, EventArgs e)

OpenFileDialog dlg = naujas OpenFileDialog();

dlg.Title = "Atidaryti vaizdą";!}

dlg.Filter = "jpg failai (*.jpg)|*.jpg|Visi failai (*.*)|*.*";

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

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

pictureBox1.Image = pictureBox3.Image;

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

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

private void timer1_Tick(objekto siuntėjas, EventArgs e)

jei (2 žymimasis langelis. Pažymėta)

(//pakeiskite pkcherbox režimą į ZOOM

pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

//jei nepažymėta, vaizdas yra centre

pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;

jei (1 žymimasis langelis. Pažymėta)

(//"animacijos" įgyvendinimas - paveikslėlio sukimas aplink savo ašį pagal laikrodžio rodyklę/prieš laikrodžio rodyklę

radioButton1.Visible = tiesa;

radioButton2.Visible = tiesa;

jei (radioButton1.Checked)

( // pagal laikrodžio rodyklę

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

jei (jj == 360) jj = 0;

(//prieš laikrodžio rodyklę

this.btnRotateImage_Click(this, e);

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

jei (jj == 0) jj = 359;

radioButton1.Visible = false;

radioButton2.Visible = false;

Panašūs dokumentai

    Vaizdo triukšmo filtravimas. Jo binarizacijos ir pasukimo algoritmai. Informacinių natų atpažinimo požymių formavimas. Schema programinė įranga. Programoje įdiegtų klasių, funkcijų, metodų aprašymas. Taikymo testavimas.

    kursinis darbas, pridėtas 2013-12-17

    Informacija apie grafinius formatus. Vaizdo saugojimas programoje. Eilė kaip pagalbinė duomenų struktūra. Vaizdo įkėlimas iš dvejetainio failo. Operacijos su vaizdais. Rezoliucijos sumažėjimas. Padidinkite vaizdo dydį.

    kursinis darbas, pridėtas 2013-06-29

    Programos, skirtos pustonio vaizdui suspausti arba suspausti naudojant tarptautinį JPEG standartą, kūrimas. JPEG metodo aprašymas, rezultatų išvedimas dekoduoto vaizdo pavidalu. Pustonių vaizdo glaudinimo metodų apžvalga.

    kursinis darbas, pridėtas 2012-10-14

    Bendras algoritmas lyginant du vaizdus. Metodas maksimalių plotų. Histogramos metodas. Vaizdo paruošimas atpažinimui. Daugiamatės funkcijos modeliavimas. Vektorių pasiskirstymas. Deformuojami modeliai. Programinės įrangos diegimas.

    baigiamasis darbas, pridėtas 2008-09-29

    Animacinio animacinio filmo veikėjo „Mikė Pūkuotukas“ GIF atvaizdo kūrimo etapų aprašas programoje Adobe Photoshop CS6. Pasikartojančio vaizdo sluoksnio kūrimas ir kadrų paruošimas GIF animacijai. Tinkinkite animacijos efektus ir gaukite GIF failą.

    laboratorinis darbas, pridėtas 2015-03-05

    Programos, kurios tikslas yra paversti nespalvotus pustonių vaizdus į spalvotus, kūrimas. Vaizdo apdorojimo technikų apžvalga, vaizdo transformavimo metodai naudojant neuroninis tinklas. Spalvų erdvių klasterizacijos aprašymai.

    baigiamasis darbas, pridėtas 2012-06-17

    Judėjimo parametrų nustatymas, kai sukamasis judėjimas, greičio, pagreičio, laiko priklausomybė nuo sukimosi kampo, sukimosi laiko nustatymas tam tikru kampu. Taikymas pastatytas matematinis modelis kūno judėjimo parametrų skaičiavimui.

    kursinis darbas, pridėtas 2010-03-18

    Kompiuterinė grafika. Pikseliai, raiška, vaizdo dydis. Vaizdų tipai. Juodos ir baltos linijos ir pustonių vaizdai. Indeksuotos spalvos. Pilnų spalvų vaizdai. Failų formatai. Spalva ir jos modeliai. Spalvoti modeliai: RGB, CMYK, HSB.

    santrauka, pridėta 2009-02-20

    Vaizdo kodavimo metodai: trukmės kodavimas, nuo dažnio priklausomas kodavimas, Lempel-Ziv metodas. Linijos dydis 16 bitų spalva. Visko dydžio apskaičiavimas originalus vaizdas. Aukštos kokybės ir žemos kokybės vaizdo glaudinimo pavyzdžiai.

    pristatymas, pridėtas 2013-10-22

    Adobe Photoshop programos sąsaja. Vaizdo pakeitimų atlikimas. Atspalvių keitimo ir vaizdų iškraipymo įrankiai. Vaizdo formavimo seka. Vaizdų tonų ir spalvų korekcija, darbas su filtrais ir funkcijomis.

Rastrinio vaizdo pasukimas kampais, kurie yra 90° kartotiniai, palyginti su vaizdo geometriniu centru, yra nereikšminga užduotis, kurią galima išspręsti neprarandant kokybės tiesiog transformuojant kiekvieno pikselio koordinates.

Žemiau mes apsvarstysime algoritmą, kaip tiksliai pasukti rastrinį vaizdą savavališku kampu, palyginti su savavališku centru, su minimaliais nuostoliais.

Reiškiu dėkingumą Vladislavui Vladimirovičiui Charčenkai už suteiktą pagalbą.

Algoritmas

Iš aukščiau pateikto paveikslo matyti, kad pasukus rastrinį vaizdą, kiekvieno galutinio vaizdo pikselio spalva nustatoma pridedant kelių pradinio vaizdo pikselių „fragmentų“ spalvas, proporcingas atitinkamo vaizdo plotams. „fragmentai“. Todėl bendrai kalbant, mūsų problemos sprendimas bus surasti visų „fragmentų“ sritis kiekvienam pradinio vaizdo pikseliui ir surinkti kiekvieno galutinio vaizdo pikselio spalvą iš atitinkamų „fragmentų“ spalvų.

Kaip pradinio vaizdo pikselių modelį naudosime kvadratą, kurio kraštinė = 1, su tokiais kampų žymėjimais:
i1 - dešiniausias kampas;
i2 - žemiausias kampas;
i3 - kairysis kampas;
i4 yra viršutinis kampas.

Galutinis vaizdo modelis bus lygiagrečių horizontalių ir vertikalių linijų tinklelis, kurio atstumas tarp linijų = 1.

Rastrinio vaizdo sukimosi centro koordinatės šiame vaizde gali būti išreikštos kaip savavališkų realiųjų skaičių pora. Tai reiškia, kad mūsų uždavinyje sukimosi centras gali būti ne geometriniame pikselio centre ir ne tinklelio linijų susikirtimo taške, o savavališkame Dekarto koordinačių taške.

Kadangi pasukus rastrinį vaizdą, kiekvieno pikselio kvadratas pasukamas tuo pačiu kampu (to pikselio centro atžvilgiu), išspręsime vieno pikselio problemą, o gautą sprendimą pritaikysime kiekvienam originalo pikseliui. vaizdas.

Bitmap pasukimas gali būti suskirstytas į dvi dalis:
1. Pasukite kiekvieno pradinio vaizdo pikselio kvadratą šio kvadrato centro atžvilgiu tam tikru kampu.
2. Pikselio kvadrato centro poslinkis pagal vaizdo pasukimo kampą vaizdo sukimosi centro atžvilgiu, kad kvadratas užimtų galutinę vietą galutinio vaizdo tinklelyje.
Tokiu atveju galutinio vaizdo tinklelis supjausto kiekvieno pradinio vaizdo pikselio kvadratą į 4, 5 arba 6 gabalus.

Norint susisteminti gautų variantų įvairovę, turėjau sukurti visų galimų pradinio vaizdo pikselių kvadrato sankirtos su galutinio vaizdo tinkleliu taksonomiją. Buvo tik 23 labai skirtingi variantai:


Sutarimai čia yra tokie:
- skaičiai langeliuose nurodo pikselio kvadrato kampų skaičius, kurie po vaizdo pasukimo pateko į tam tikrą galutinio vaizdo tinklelio langelį;
- žalia spalva nurodo ląsteles, kuriose pateko pikselio dalys, ir garantuojama, kad ten paliks „skilteles“;
- geltona žymi ląsteles, į kurias, priklausomai nuo sąlygų, gali pataikyti (arba nepataikyti) pikselių kvadrato „fragmentai“, suformuoti ne kvadrato kampais, o kvadrato kraštinėmis.

Aiškumo dėlei pateiksiu vieną iš galimų varianto Nr.3 variantų:

Kaip matote, viršutiniame dešiniajame langelyje nėra pikselio „fragmento“, nors kitomis sukimosi sąlygomis jis galėtų turėti.
Kad neapsunkinčiau skaitytojo detaliais geometriniais skaičiavimais, iš karto pasakysiu, kad visose šiose 23-ose parinktyse pradinio vaizdo pikselis supjaustomas į „šukes“, kurių plotą nesunku apskaičiuoti sujungus 4 formules. . Žemiau pateikiamos šios formulės su iliustracijomis. Raudona spalva nurodo galutinio vaizdo tinklelio linijas, kurios perpjauna pikselių kvadratą. Plotas, kurio plotas apskaičiuojamas pagal formulę, yra geltonai.

Formulė 1
Ši formulė nenaudojama galutiniam „skeveldros“ plotui apskaičiuoti, tačiau ją patogu naudoti greitai apskaičiuojant pagalbines tarpines sritis, nes žinome, kad viso pikselio plotas = 1.
Iš kvadrato kampų nukritę aukščiai į galutinio vaizdo tinklelį naudojami kaip įvesties kintamieji visose formulėse dėl tos paprastos priežasties, kad apskaičiuojant šiuos aukščius reikia akimirksniu pasirinkti trupmeninę koordinatės skaitinės vertės dalį. atitinkamo pikselio kvadrato kampo.

Formulė 2

Ši formulė naudojama tik 1 ir 2 variantuose.

Formulė 3
Dažnai naudojama formulė – gerai, kad ji greitai apskaičiuojama. Kadangi kiekvieno pikselio sukimosi kampas yra vienodas, visas trigonometrines funkcijas galima apskaičiuoti vieną kartą, prieš apdorojant visus pikselius, ir tada naudoti šias reikšmes cikle kaip konstantas.

Formulė 4
Ši formulė apskaičiuojama dviem etapais. Pirmiausia įvertinama skliausteliuose esanti išraiška. Jei ji įgyja teigiamą reikšmę, tada apskaičiuojamas plotas. Jei reikšmė yra neigiama, tai reiškia, kad tinklelio kampo ir kvadrato kraštinės suformuota „drožlė“ nėra nupjauta nuo pikselio ir nėra prasmės atlikti tolesnius skaičiavimus.

Atsižvelgiant į visa tai, kas išdėstyta pirmiau, paprastai algoritmas atrodys taip:
1. Į kompiuterio atmintį įkelkite originalų vaizdą.
2. Apskaičiuokite galutinio vaizdo matmenis pikseliais.
3. Sukurkite tarpinį dvimatį masyvą, kurio kiekviename elemente yra 3 RGB spalvų komponentai slankiojo kablelio formatu. Masyvo matmenys yra lygūs galutinio vaizdo matmenims.
4. Paeiliui pereiname visus pradinio vaizdo pikselius; kiekvieną iš jų pasukame tam tikru kampu ir dedame į galutinio vaizdo tinklelį, apskaičiuodami 4 pikselio kvadrato kampų koordinates; suskirstome pikselį į 23 parinktis ir suskaičiuojame „fragmentų“ plotus; Gautų „skeveldrų“ spalvas pridedame prie atitinkamų tarpinio masyvo elementų proporcingai šių „skeveldrų“ plotui.
5. Apdoroję visus pradinio vaizdo pikselius, RGB reikšmes tarpiniame masyve suapvaliname iki kiekvieno elemento sveikojo skaičiaus ir pagal šias sveikųjų skaičių reikšmes sukuriame galutinį vaizdą BMP formatu.

Programa

Remiantis aukščiau pateiktu algoritmu, buvo parašyta programa, skirta „Windows“. Galima atsisiųsti „Object Pascal“ šaltinio kodus ir sukompiliuotą vykdomąjį failą.

Programos sąsaja.
Spustelėjus mygtuką „Atidaryti...“, atidaromas BMP failo pasirinkimo dialogo langas. Palaikomi tik taškai su 24 bitų palete. Atidarytas vaizdas rodomas lange. Lango pavadinime rodomas visas failo kelias ir vaizdo matmenys.

Lauke „Kampas“ nurodykite sukimosi kampą laipsniais – bet kurį teigiamą skaičių.
Įvedant trupmeninius skaičius kaip dešimtainį skyriklį galima naudoti tašką arba kablelį.

Radijo mygtukai „CW“ ir „CCW“ nustato sukimosi kryptį: atitinkamai „pagal laikrodžio rodyklę“ ir „prieš laikrodžio rodyklę“.

Bloke „Fono spalva“ galite nustatyti fono spalvą, su kuria bus maišomi vaizdo kraštinių pikseliai. Numatytoji fono spalva yra juoda.

Laukuose „Centras X“ ir „Centras Y“ nurodomos sukimosi centro koordinatės. Reikia atsižvelgti į tai, kad koordinačių pradžia yra viršutiniame kairiajame vaizdo kampe, o Y didėja žemyn. Pagal numatytuosius nustatymus sukimosi centras nustatytas į įkelto vaizdo geometrinį centrą.

Spustelėjus mygtuką „Pasukti“ arba paspaudus Enter klavišą, vaizdas pasukamas nurodytu kampu nurodyto sukimosi centro atžvilgiu ir rodomas lange. Vaizdo pasukimas kampais, kurie yra 90° kartotiniai, įgyvendinamas pagal supaprastintą schemą, tiesiog pakeičiant pradinio vaizdo pikselių koordinates, o „Centro X“ ir „Centro Y“ reikšmės nepaisomos.
Algoritmo veikimo laikas sekundėmis rodomas po mygtuku „Pasukti“.

Naudojant mygtuką „Išsaugoti...“, pasuktą vaizdą galima įrašyti į BMP failą.

Jei galutinis vaizdas netelpa į langą, jis priderinamas prie lango kraštų naudojant StretchBlt API funkciją – todėl realią didelių vaizdų kokybę galima įvertinti tik naudojant išsaugotą BMP failą.
Norint pasukti vaizdą kitu kampu, jo perkrauti nereikia – pasukamas vaizdas iš pasirinkto failo, o ne tas, kuris šiuo metu rodomas lange.

1024 x 768 matmenų vaizdas mašinoje su keturių branduolių 2,67 GHz procesoriumi ši programa pasuka savavališku kampu, vidutiniškai per maždaug 0,5 sekundės. 4000 x 4000 matmenų vaizdas – maždaug per 10 sekundžių. Algoritmo veikimo laikas skirtingais kampais gali skirtis dėl to, kad vaizdas skirtingais kampais suskaidomas į skirtingą skaičių „skeveldrų“, atitinkamai skiriasi bendras laikas, sugaištas skaičiuojant šių fragmentų plotus.

Tarpinis masyvas, kuriame yra informacija apie galutinio vaizdo pikselių spalvą slankiojo kablelio formatu, yra įdiegtas išplėstiniame tipe (10 baitų), todėl apdorojant didelius vaizdus (maždaug daugiau nei 5000 x 5000 pikselių) gali atsirasti atminties perpildymo klaida. Situaciją galima pagerinti naudojant ne tokį tikslų duomenų tipą ir išsaugant sveikąją skaičiaus dalį tiesiai į galutinį bitų grafiką, pagalbiniame masyve paliekant tik trupmeninę dalį.

Rezultatai

Atlikime lyginamąją Photoshop programoje įdiegto precizinio algoritmo ir vaizdo pasukimo algoritmo veikimo analizę.
1 testas
Pirmajam bandymui padariau labai paprastą vaizdą – horizontalią juodą 1 pikselio storio ir 10 pikselių ilgio liniją, nukrypusią nuo balto kvadrato, kurio matmenys 100 x 100 pikselių, centro:

Po to aš pasukau šį vaizdą taško su koordinatėmis (0, 0) atžvilgiu 3° pagal laikrodžio rodyklę. Taškas (0, 0) buvo pasirinktas, nes, remiantis mano eksperimentais, „Photoshop“ pasuka vaizdą šio taško atžvilgiu. Štai lyginamasis rezultatas (padidintas 24x):

Tikslumo algoritmas

Photoshop 7.0.1

„Photoshop CS6“ (64 bitų)
„Photoshop“ algoritmas sukuria kontrastingesnį vaizdą, o tikslumo algoritmas šiek tiek „sulieja“ vaizdą. Tačiau apskritai, vizualiai įvertinus, rezultatas beveik toks pat. Praeidami pažymime, kad „Photoshop“ įdiegtas sukimosi algoritmas per 10 metų nepatyrė reikšmingų pokyčių.

2 testas
Antram bandymui pasirinkau Tulip iš standartinio Win7 platinimo:

Pasukus šį vaizdą 5° pagal laikrodžio rodyklę geometrinio centro atžvilgiu, susumavau visų pikselių spalvas pagal RGB kanalus. Štai tikslaus algoritmo ir „Photoshop“ algoritmo rezultatas:
Skaičiai skliausteliuose rodo absoliutų šio rodiklio nuokrypį nuo originalo.
Vaizdo spalva po precizinio pasukimo ir prieš apvalinimą praktiškai nepasikeitė – to ir reikėjo tikėtis.
Didžiausią nuokrypį šiuo konkrečiu atveju randame „Photoshop“ algoritmo G kanale. Procentais šis nuokrypis yra tik 0,06%, todėl jis nėra pastebimas „iš akies“, tačiau dėl perfekcionizmo „Photoshop“ rezultatas yra prastesnis nei tikslaus algoritmo.
Svarbu pažymėti, kad kiekvieno pikselio spalvos suapvalinimas tikslumo algoritme iki sveikojo skaičiaus reikšmės, reikalingos BMP formatui, negrįžtamai sunaikina dalį spalvų informacijos.

Norėdami vizualiai palyginti du algoritmus, pateiksiu padidintą vaizdo fragmentą,

„Photoshop“ pasukta atitinkamai 5° pagal laikrodžio rodyklę:

Ir su tikslumo algoritmu:

Lyginamoji analizė rodo, kad „Photoshop“ geriau išsaugo kontrastingus vaizdo elementus, bet tuo pačiu sukuria iškreiptų spalvų „aureoles“. Tikslumo algoritmas neiškraipo spalvos, bet tuo pačiu kažkiek „sulieja“ vaizdą.

Išvados

1. Galimas tikslumas ir tuo pačiu gana greitas rastrinio vaizdo pasukimas savavališku kampu. Man lieka paslaptis, kodėl profesionalūs grafiniai redaktoriai neturi parinkties, leidžiančios vartotojui itin tiksliai pasukti vaizdą per šiek tiek daugiau laiko.

2. Nepaisant itin didelio nagrinėjamo algoritmo tikslumo, atvirkštinė vaizdo transformacija, t.y. Neįmanoma pasukti į priešingą kampą neprarandant kokybės, nes tikslios spalvos reikšmės apvalinimas (slankiojo kablelio formatu) negrįžtamai sunaikina dalį spalvos informacijos.

3. Vaizdinio kontrastingų detalių suvokimo požiūriu geriausią rezultatą duoda neoptimalus Photoshop algoritmas. Tikslumo algoritmą tikslinga naudoti tais atvejais, kai svarbu išsaugoti maksimalią informaciją apie vaizdo spalvą.

UPD: Praktiniam naudojimui parašiau programą, kuri įgyvendina supaprastintą algoritmą, kuriame kiekvienam galutinio vaizdo pikseliui paeiliui apskaičiuojami visi reikalingi pikselių gabalėliai pradiniame vaizde ir iškart įvyksta spalvų apvalinimas. Tik po to apskaičiuojamas kitas galutinio vaizdo pikselis. Tokiu atveju programa kelis kartus pasiekia vieną šaltinio vaizdo pikselį. Taigi skaičiavimo laikas pailgėjo vidutiniškai 1,7 karto, tačiau atmintis šioje algoritmo versijoje išleidžiama tik bitmaps saugojimui, o tai leidžia dirbti su didelio dydžio vaizdais. Galite atsisiųsti programą ir šaltinius



Ar jums patiko straipsnis? Pasidalinkite su draugais!