Bildfiltrering kan grupperas i två beroende på effekterna: Lågpassfilter (utjämning) Lågpassfiltrering (aka utjämning), används för att avlägsna högt rumsfrekvent ljud från en digital bild. Lågpassfiltrarna brukar använda rörlig fönsteroperatör som påverkar en pixel av bilden åt gången, ändrar sitt värde med någon funktion av en lokal region (fönster) av pixlar. Operatören flyttar över bilden för att påverka alla pixlar i bilden. Högpassfilter (Kantdetektion, skärpning) Ett högpassfilter kan användas för att göra en bild skarpare. Dessa filter betonar fina detaljer i bilden - motsatsen till lågpassfiltret. Högpassfiltrering fungerar på samma sätt som lågpassfiltrering, det använder bara en annan konvolutkärna. När man filtrerar en bild påverkas varje pixel av sina grannar, och nettoeffekten av filtrering flytta informationen runt bilden. I det här kapitlet, använd den här bilden: Sök efter bogotobogo-webbplats: Bogotobogos webbplatssökning: Medel filtrering är lätt att implementera. Den används som en metod för utjämning av bilder, vilket reducerar intensitetsvariationen mellan en pixel och den andra resulterar i att minska bruset i bilder. Tanken med genomsnittlig filtrering är helt enkelt att ersätta varje pixelvärde i en bild med medelvärdet (medelvärdet) för sina grannar, inklusive sig själv. Detta medför att eliminera pixelvärden som inte är representativa för omgivningen. Medel filtrering anses vanligen som ett konvolutionsfilter. Liksom andra omvälvningar baseras den kring en kärna, som representerar formen och storleken på grannskapet som ska samplas vid beräkningen av medelvärdet. Ofta används en 3 gånger 3 kvadratkärna, som visas nedan: Mf är medelfilteret: Filtret2 () definieras som: Y filter2 (h, X) filtrerar data i X med det tvådimensionella FIR-filtret i matris h. Det beräknar resultatet, Y, med hjälp av tvådimensionell korrelation och returnerar den centrala delen av korrelationen som är lika stor som X. Den returnerar den del av Y som specificeras av formparametern. formen är en sträng med en av dessa värden: full. Returnerar den fullständiga tvådimensionella korrelationen. I detta fall är Y större än X. samma. (standard) Returnerar den centrala delen av korrelationen. I detta fall är Y lika stor som X. Giltig. Returnerar endast de delar av korrelationen som beräknas utan nollpolade kanter. I det här fallet är Y mindre än X. Nu vill vi tillämpa den kärna som definierades i föregående avsnitt med hjälp av filter2 (): Vi kan se att den filtrerade bilden (höger) har blurts lite i jämförelse med den ursprungliga ingången (vänster) . Som tidigare nämnts kan lågpassfiltret användas för avbening. Låt oss testa det. Först, för att göra inmatningen lite smutsig spraya vi lite peppar och salt på bilden och applicerar sedan medelfilteret: Det har viss effekt på salt - och pepparbröstet men inte mycket. Det gjorde dem bara suddiga. Vad sägs om att försöka matlabs inbyggda medianfilter bogotobogo webbplats sökning: bogotobogo webbplats sökning: Median filter - medfilt2 () Här är manuset: Mycket bättre. Till skillnad från föregående filter som bara använder medelvärde, den här gången använde vi median. Medianfiltrering är en olinjär operation som ofta används vid bildbehandling för att minska salt - och pepparljud. Observera också att medfilt2 () är 2-D-filter, så det fungerar bara för gråskalebild. För att ta bort brus för RGB-bild, gå till slutet av detta kapitel: Ta bort ljud i RGB-bild. Matlab tillhandahåller en metod för att skapa ett fördefinierat 2-D-filter. Dess speciella (): h fspecial (typ) skapar ett tvådimensionellt filter h av den angivna typen. Den returnerar h som en korrelationskärna, som är lämplig form att använda med imfilter (). Typen är en sträng som har ett av dessa värden: Matlab Bild - och videoförädling OpenCV 3 - bildvideobehandling OpenCV 3 bild - och videoförädling med PythonIntroduction Den föregående artikeln tittade på vad glidande medelvärden är och hur man beräknar dem. Denna artikel tittar nu på hur man implementerar dessa i Web Intelligence. Formeln som används här är kompatibel med XIr3-versionen av SAP BOE, men vissa formler kan fungera i tidigare versioner om de finns tillgängliga. We8217ll börjar med att titta på hur man beräknar ett enkelt glidande medelvärde innan man tittar på vägda och exponentiella former. Arbetade exempel Exemplen nedan använder alla samma dataset som är av aktiekursdata i en Excel-fil som du kan ladda ner. Den första kolumnen i filen är börskursens datum och sedan kolumner med öppningspris, högsta pris på dagen, lägsta pris, slutkurs, volym och justerad slutkurs. We8217ll använder slutkurs i vår analys nedan med datumobjektet. Enkelt rörligt medelvärde Det finns ett par sätt på vilka vi kan beräkna enkla glidande medelvärden. Ett alternativ är att använda funktionen Föregående för att få värdet av en föregående rad. Till exempel beräknar följande formel ett glidande medelvärde på vårt slutkurspris för en glidande genomsnittsdataset med storlek 3, det här är en ganska enkel formel, men det är uppenbart att det inte är praktiskt när vi har ett stort antal perioder här vi kan göra användning av RunningSum formel och för en dataset av storlek N vi har Slutligen har vi en 3: e teknik, som trots att det är mer komplicerat kan det ha bättre prestanda eftersom det beräknar det nya värdet baserat på tidigare värde istället för två löpande summer över hela data uppsättning. Men denna formel fungerar bara efter Nth-punkten i den övergripande datamängden och eftersom det hänvisar till ett tidigare värde måste vi också ange ett startvärde. Nedan är den fullständiga formeln som används för vår aktiekursanalys där vår glidande genomsnittliga period är 15 dagar. Datumet 1252010 är den 15: e datapunkten i vår dataset och så för denna punkt beräknar vi ett normalt genomsnitt med RunningSum. För alla datum bortom detta värde använder vi vår SMA-formel och vi lämnar tomma alla datum före detta datum. Figur 1 nedan är ett diagram i Web Intelligence som visar våra aktiekursdata med ett enkelt glidande medelvärde. Figur 1. Web Intelligence-dokument som visar en enkel rörlig genomsnittsviktad rörlig genomsnittsvärde En vägd glidande medelformel med en period av 3 är, Som med vår första enkla glidande medelformeln ovan är det bara praktiskt under ett litet antal perioder. Jag har ännu inte kunnat hitta en enkel formel som kan användas för större glidande medelperioder. Matematiskt är det möjligt men begränsningar med Web Intelligence innebär att dessa formler don8217t konverterar. Om någon kan göra det skulle jag gärna höra Figuren nedan är ett WMA i period 6 som implementeras i Web Intelligence. Figur 2. Web Intelligence-dokument av ett Viktat Flyttande Medel Exponentiellt Flytande Medel Ett exponentiellt rörligt medelvärde är ganska rakt framåt för att implementera i Web Intelligence och det är ett lämpligt alternativ till ett vägat rörligt medelvärde. Den grundläggande formeln är här we8217ve hårdkodad 0,3 som vårt värde för alfa. Vi tillämpar bara denna formel för perioder större än vår andra period så vi kan använda ett if-uttalande för att filtrera dessa ut. För vår första och andra perioden kan vi använda det tidigare värdet och så är vår slutliga formel för EMA, Nedan är ett exempel på en EMA tillämpad på våra lagerdata. Figur 3. Web Intelligence-dokument visar en Exponentiell Moving Average Input Controls Eftersom vår EMA-formel doesn8217t är beroende av storleken på den glidande medeltiden och vår enda variabel är alfa kan vi använda Input Controls för att tillåta användaren att justera värdet av alfa. För att göra detta skapar du en ny variabel som heter 8216alpha8217 och definierar it8217s formel som, Uppdatera vår EMA-formel till, Skapa en ny ingångskontroll välj vår alfabalva som inputkontrollrapportobjektet Använd en enkel reglage och ställ in följande egenskaper, En gång gjort du ska kunna flytta skjutreglaget och omedelbart se förändringarna till trendlinjen i diagrammet. Slutsats Vi tittade på hur man implementerar tre typer av glidande medelvärde i Web Intelligence och även om allt var möjligt är det Exponentiella rörliga genomsnittet förmodligen det enklaste och mest flexibla . Jag hoppas att du hittade den här artikeln intressant och som alltid är någon feedback väldigt välkommen. Postnavigering Lämna ett svar Avbryt svar Du måste vara inloggad för att skriva en kommentar. Tricket till Weighted Moving Average (WMA) är att du måste skapa en variabel som representerar WMA-täljare (se Wikipedia för referens.) Detta ska se ut som följande: Föregående (Själv) (n Stäng) 8211 (Tidigare (RunningSum ( Stäng)) 8211 Föregående (RunningSum (Stäng) n1) där n är antalet perioder. Då skulle den faktiska WMA8217s formel vara så här: Numerator (n (n 1) 2) där Numerator är den variabel du skapade tidigare.1.5 Ingång och Output I det här avsnittet utökar vi uppsättningen enkla abstraktioner (kommandoradsinmatning och standardutmatning) som vi har använt som gränssnitt mellan våra Java-program och omvärlden för att inkludera standardinmatning. Standardteckning och standard ljud. Standard inmatning gör det bekvämt för oss att skriva program som bearbetar godtyckliga mängder inmatning och att interagera med våra standardprogrammer gör det möjligt för oss att arbeta med grafik och standard ljud lägger till ljud. m kommandoraden och skriv ut en rad tecken som utgång. Som standard är både kommandoradsargument och standardutgång associerad med en applikation som tar kommandon, som vi refererar till som terminalfönstret. Här följer några instruktioner för att använda kommandoraden på ditt system. Mac-mitten Windows-mitten Linux Command-line-argument. Alla våra klasser har en main () - metod som tar en String array args som argument. Den arrayen är sekvensen av kommandoradsargument som vi skriver. Om vi avser ett argument att vara ett tal måste vi använda en metod som Integer. parseInt () för att konvertera den från String till lämplig typ. Standardutgång. För att skriva ut utgångsvärden i våra program har vi använt System. out. println (). Java skickar resultaten till en abstrakt ström av tecken som kallas standardutmatning. Som standard kopplar operativsystemet standardutgången till terminalfönstret. All produktion i våra program hittills har uppstått i terminalfönstret. RandomSeq. java använder den här modellen: Det tar ett kommandoradsargument n och skriver till standardutmatningen en sekvens av n slumpmässiga tal mellan 0 och 1. För att slutföra vår programmeringsmodell lägger vi till följande bibliotek: Standardinmatning. Läs antal och strängar från användaren. Standardteckning. Plotgrafik. Standard ljud. Skapa ljud. Standardutgång. Metoderna Javas System. out. print () och System. out. println () implementerar den grundläggande standardutgåvan för abstraktion som vi behöver. Men för att behandla standardinmatning och standardutmatning på ett enhetligt sätt (och för att ge några tekniska förbättringar) använder vi liknande metoder som definieras i vårt StdOut-bibliotek: Javas print () och println () - metoderna är de som du har använt. Metoden printf () ger oss mer kontroll över utseendet på utmatningen. Formaterad utskrift. I sin enklaste form tar printf () två argument. Det första argumentet kallas formatsträngen. Den innehåller en omvandlingsspecifikation som beskriver hur det andra argumentet ska konverteras till en sträng för utmatning. Format strängar börjar med och slutar med en bokstav med en bokstavskod. Följande tabell sammanfattar de mest använda koderna: Formatsträng. Formatsträngen kan innehålla tecken utöver de som gäller för omvandlingsspecifikationen. Konverteringsspecifikationen ersätts av argumentvärdet (omvandlas till en sträng som specificerat) och alla återstående tecken överförs till utgången. Flera argument. Funktionen printf () kan ta mer än två argument. I det här fallet kommer formatsträngen att ha en ytterligare omvandlingsspecifikation för varje ytterligare argument. Här finns mer dokumentation om strängsyntax för printf-format. Standardinmatning. Vårt StdIn-bibliotek tar data från en standardinmatningsström som innehåller en sekvens av värden som är separerade av blanksteg. Varje värde är en sträng eller ett värde från en av Javas primitiva typer. En av huvudfunktionerna i standardinmatningsströmmen är att ditt program använder värden när det läser dem. När ditt program har läst ett värde kan det inte säkerhetskopiera och läsa det igen. Biblioteket definieras av följande API: Vi överväger nu flera exempel i detalj. Skriving av inmatning. När du använder Java-kommandot för att aktivera ett Java-program från kommandoraden gör du faktiskt tre saker: (1) utfärdar ett kommando för att starta ditt program, (2) anger värdena för kommandoradsargumenten och ( 3) börjar definiera standardinmatningsströmmen. Strängen av tecken som du skriver i terminalfönstret efter kommandoraden är standardinmatningsströmmen. Till exempel, AddInts. java tar ett kommandoradsargument n. läser sedan n tal från standardinmatningen och lägger till dem och skriver resultatet till standardutmatning: Inputformat. Om du skriver abc eller 12.2 eller true när StdIn. readInt () väntar en int. då svarar den med en InputMismatchException. StdIn behandlar strängar av på varandra följande whitespace-tecken som identiska med ett utrymme och låter dig avgränsa dina nummer med sådana strängar. Interaktiv användarinmatning. TwentyQuestions. java är ett enkelt exempel på ett program som interagerar med sin användare. Programmet genererar ett slumpmässigt heltal och ger sedan ledtrådar till en användare som försöker gissa numret. Den grundläggande skillnaden mellan det här programmet och andra som vi har skrivit är att användaren har möjlighet att ändra kontrollflödet medan programmet körs. Bearbetar en inmatningsström med godtycklig storlek. Inmatningsflöden är vanligtvis ändliga: ditt program går genom ingångsströmmen, förbrukar värden tills strömmen är tom. Men det finns ingen begränsning av storleken på ingångsströmmen. Average. java läser i en sekvens av reella tal från standardinmatningen och skriver ut sitt genomsnitt. Omdirigering och rörledning. För många applikationer är det inte möjligt att skriva in data som en standardinmatningsström från terminalfönstret, eftersom det begränsar våra programtillverkningseffekt med den mängd data som vi kan skriva. På samma sätt vill vi ofta spara informationen som skrivs ut på standardutgångsströmmen för senare användning. Vi kan använda operativsystemmekanismer för att hantera båda problemen. Omdirigering av standardutdata till en fil. Genom att lägga till ett enkelt direktiv till kommandot som påminner om ett program kan vi omdirigera sin standardutmatning till en fil, antingen för permanent lagring eller för inmatning till något annat program vid en senare tidpunkt. Exempelvis anger kommandot att standardutmatningsströmmen inte ska skrivas ut i terminalfönstret, utan istället skrivas till en textfil med namnet data. txt. Varje anrop till StdOut. print () eller StdOut. println () lägger till text i slutet av den filen. I detta exempel är slutresultatet en fil som innehåller 1.000 slumpmässiga värden. Omdirigering av standardutmatning från en fil. På samma sätt kan vi omdirigera standardinmatning så att StdIn läser data från en fil i stället för terminalfönstret. Exempelvis beräknar kommandot en sekvens av siffror från filen data. txt och beräknar deras medelvärde. Specifikt är symbolen lt ett direktiv för att implementera standardinmatningsströmmen genom att läsa från filen data. txt istället för att vänta på att användaren skriver in något i terminalfönstret. När programmet anropar StdIn. readDouble (). operativsystemet läser värdet från filen. Denna möjlighet att omdirigera standardinmatning från en fil gör att vi kan bearbeta enorma mängder data från vilken som helst källa med våra program, begränsad endast av storleken på de filer som vi kan lagra. Ansluta två program. Det flexibla sättet att genomföra standardinmatningen och standardutmatningsabstraktionerna är att ange att de implementeras av våra egna program. Denna mekanism kallas piping. Till exempel anger följande kommando att standardutmatningen för RandomSeq och standardinmatningsströmmen för Medel är samma ström. Filter. För många vanliga uppgifter är det lämpligt att tänka på varje program som ett filter som konverterar en standardinmatningsström till en standard utmatningsström på något sätt, RangeFilter. java tar två kommandoradsargument och skriver ut på standardutmatning dessa nummer från standardinmatningen som faller inom det angivna området. Ditt operativsystem tillhandahåller också ett antal filter. Till exempel sätter sortfiltret linjerna på standardinmatning i sorterad ordning: Ett annat användbart filter är mer. som läser data från standardinmatning och visar den i ditt terminalfönster en skärm i taget. Om du till exempel skriver så ser du så många siffror som passar i ditt terminalfönster, men mer väntar på att du träffar mellanslagstangenten innan du visar varje efterföljande skärmfylld. Standardteckning. Nu introducerar vi en enkel abstraktion för att producera ritningar som utgång. Vi föreställer oss en abstrakt ritningsanordning som kan rita linjer och punkter på en tvådimensionell duk. Enheten kan svara på de kommandon som våra program utfärdar i form av samtal till statiska metoder i StdDraw. Det primära gränssnittet består av två typer av metoder: ritningskommandon som gör att enheten kan göra en åtgärd (som att dra en linje eller rita en punkt) och styra kommandon som anger parametrar som penstorlek eller koordinatvåg. Grundläggande ritkommandon. Vi tänker först på ritningskommandon: Dessa metoder är nästan självdokumenterade: StdDraw. line (x0, y0, x1, y1) ritar ett rakt segment som förbinder punkten (x 0, y 0) med punkten (x 1. y 1). StdDraw. point (x, y) drar en plats centrerad på punkten (x, y). Standardkoordinatskalan är enhetstorget (alla x - och y - koordinater mellan 0 och 1). Standard implementeringen visar duken i ett fönster på din dators skärm, med svarta linjer och punkter på en vit bakgrund. Din första ritning. HelloWorld för grafikprogrammering med StdDraw är att dra en triangel med en punkt inuti. Triangle. java åstadkommer detta med tre samtal till StdDraw. line () och ett samtal till StdDraw. point (). Kontrollkommandon. Standarddukstorleken är 512-by-512 pixlar och standardkoordinatsystemet är enhetens kvadrat, men vi vill ofta rita plottar i olika vågar. Också, vi vill ofta rita linjesegment av olika tjocklek eller punkter av olika storlek från standarden. För att tillgodose dessa behov har StdDraw följande metoder: Exempelvis sätter ordningen med två samtal ritningskoordinaterna inom en avgränsningsruta vars nedre vänstra hörn är vid (x 0, y 0) och vars övre högra hörn är vid (x 1, y 1). Filtrera data till en standardteckning. PlotFilter. java läser en sekvens av punkter som definieras av (x. Y) - koordinater från standardinmatning och drar en punkt vid varje punkt. Det antar konventionen att de första fyra siffrorna på standardinmatning anger gränslinjen så att den kan skala plottet. Plottar en funktionsdiagram. FunctionGraph. java plottar funktionen y sin (4 x) sin (20 x) i intervallet (0, pi). Det finns ett oändligt antal poäng i intervallet, så vi måste göra med att utvärdera funktionen vid ett begränsat antal punkter inom intervallet. Vi prövar funktionen genom att välja en uppsättning x-värden och beräknar y-värden genom att utvärdera funktionen vid varje x-värde. Plottar funktionen genom att ansluta successiva punkter med linjer ger det som är känt som en bitvis linjär approximation. Utanför och fyllda former. StdDraw innehåller också metoder för att rita cirklar, rektanglar och godtyckliga polygoner. Varje form definierar en skiss. När metodnamnet är bara formnamnet spåras den skissen av ritpenna. När metodnamnet börjar fyllas. den angivna formen fylls i stället fast, spåras inte. Argumenten för cirkel () definierar en cirkel av radie r argumenten för kvadrat () definierar en kvadrat med sidlängd 2r centrerad på den angivna punkten och argumenten för polygon () definierar en sekvens av punkter som vi ansluter med linjer, inklusive en från sista punkten till den första punkten. Text och färg. För att kommentera eller markera olika element i ritningarna innehåller StdDraw metoder för att rita text, ställa in teckensnittet och ställa in bläck i pennan. I den här koden är java. awt. Font och java. awt. Color abstraktioner som implementeras med icke-primitive typer som du kommer att lära dig om i avsnitt 3.1. Fram till dess lämnar vi detaljerna till StdDraw. Standardbläckfärgen är svart. Standardfonten är en 16-punkts vanlig Serif-typsnitt. Dubbel buffring. StdDraw stöder en kraftfull datorgrafikfunktion som kallas dubbelbuffering. När dubbel buffring aktiveras genom att anropa enableDoubleBuffering (). all ritning sker på offscreen-duken. Skärmduken visas inte. Den existerar endast i datorns minne. Bara när du ringer show () får din ritning kopieras från skärmdisplayen till skärmdisplayen. där den visas i standard ritningsfönstret. Du kan tänka på dubbel buffring som att samla alla linjer, punkter, former och text som du berättar att dra och sedan dra dem alla samtidigt, på begäran. En orsak att använda dubbel buffring är för effektivitet när man utför ett stort antal ritkommandon. Datoranimationer. Vår viktigaste användning av dubbelbuffering är att producera datoranimationer. där vi skapar en illusion av rörelse genom att snabbt visa statiska ritningar. Vi kan producera animeringar genom att upprepa följande fyra steg: Rensa offscreen-duken. Rita in objekt på skärmen Kopiera skärmdisplayen till skärmdisplayen. Vänta ett tag. Till stöd för dessa steg har StdDraw flera metoder: Hello, World-programmet för animering är att producera en svart boll som verkar flytta runt på duken och studsar av gränsen enligt lagar av elastisk kollision. Antag att bollen är i position (x, y) och vi vill skapa intrycket av att den flyttar till en ny position, säg (x 0,01, y 0,02). Vi gör det i fyra steg: Rensa skärmdisplayen till vit. Rita en svart boll i den nya positionen på offscreen-duken. Kopiera kanfastrycket till skärmen på skärmen. Vänta ett tag. För att skapa en illusion av rörelse, itterer BouncingBall. java dessa steg för en hel serie positioner av bollen. Bilder. Vårt standardteckningsbibliotek stöder ritning av bilder såväl som geometriska former. Kommandot StdDraw. picture (x, y, filnamn) plottar bilden i det angivna filnamnet (antingen JPEG, GIF eller PNG-format) på duken, centrerad på (x, y). BouncingBallDeluxe. java illustrerar ett exempel där den studsande bollen ersätts av en bild av en tennisboll. Användarinteraktion. Vårt standardteckningsbibliotek innehåller också metoder så att användaren kan interagera med fönstret med hjälp av mouse. A första exemplet. MouseFollower. java är HelloWorld av mus interaktion. Den drar en blå boll, centrerad på musens plats. När användaren håller ner musknappen ändras kulan från blå till cyan. En enkel attraherare. OneSimpleAttractor. java simulerar rörelsen av en blå boll som lockas till musen. Det står också för en dragkraft. Många enkla dragare. SimpleAttractors. java simulerar rörelsen av 20 blå bollar som lockas till musen. Det står också för en dragkraft. När användaren klickar sprider bollarna slumpmässigt ut. Springs. Springs. java implementerar ett fjädersystem. Standard ljud. StdAudio är ett bibliotek som du kan använda för att spela och manipulera ljudfiler. Det låter dig spela, manipulera och syntetisera ljud. Vi presenterar några grundläggande begrepp bakom ett av de äldsta och viktigaste områdena datavetenskap och vetenskaplig databehandling: digital signalbehandling. Konsert A. Konsert A är en sinusvåg, skalad för att oscillera med en frekvens av 440 gånger per sekund. Funktionssynet (t) upprepar sig en gång per 2pi-enheter på x-axeln, så om vi mäter t i sekunder och plottar funktionssinnet (2pi t gånger 440) får vi en kurva som svänger 440 gånger per sekund. Amplituden (y - värdet) motsvarar volymen. Vi antar att det är skalat mellan minus1 och 1. Andra anteckningar. En enkel matematisk formel karakteriserar de andra anteckningarna på kromatisk skala. De är uppdelade lika på en logaritmisk (bas 2) skala: det finns tolv noter på kromatisk skala, och vi får den första noten ovanför en given notering genom att multiplicera frekvensen med (12) kraften av 2. När du dubbel eller halva frekvensen, flyttar du upp eller ner en oktav på skalan. Till exempel är 880 Hertz en oktav över konsert A och 110 Hertz är två oktaver under konsert A. Provtagning. För digitalt ljud representerar vi en kurva genom att prova det med jämna mellanrum, precis på samma sätt som när vi plottar funktionsgrafer. Vi provar tillräckligt ofta att vi har en exakt representation av curvemdasha. Den använda samplingsfrekvensen är 44 100 prov per sekund. Det är så enkelt: vi representerar ljud som en mängd tal (reella tal som ligger mellan minus1 och 1). Exempelvis spelar följande kodfragment konsert A i 10 sekunder. Spela den melodin. PlayThatTune. java är ett exempel som visar hur enkelt vi kan skapa musik med StdAudio. Det tar anteckningar från standardinmatning, indexerad på kromatisk skala från konsert A, och spelar dem på standard ljud. Skriv ett program MaxMin. java som läser i heltal (så många som användaren går in) från standardinmatningen och skriver ut maximi - och minimivärdena. Skriv ett program Stats. java som tar ett heltal kommandoradsargument n. läser n flytande punkttal från standardinmatningen och skriver ut deras medelvärde (medelvärde) och provstandardavvikelsen (kvadratroten av summan av kvadraterna för deras skillnader från medeltalet dividerat med n minus1). Skriv ett program LongestRun. java som läser i en sekvens av heltal och skriver ut både heltalet som visas längst i följd och körlängden. Till exempel, om ingången är 1 2 2 1 5 1 1 7 7 7 7 1 1. då ska ditt program skriva ut Längsta körning: 4 på varandra följande 7s. Skriv ett program WordCount. java som läser i text från standardinmatning och skriver ut antalet ord i texten. För syftet med denna övning är ett ord en sekvens av icke-vitaktiga tecken som omges av vitrymmet. Skriv ett program närmast. java som tar tre floating-point kommandoradsargument (x, y, z), läser från standardinmatning en sekvens av punktkoordinater ((xi, yi, zi)) och skriver ut koordinaterna för punkten närmast ((x, y, z)). Minns att kvadraten av avståndet mellan ((x, y, z)) och ((xi, yi, zi)) är (x - xi) 2 (y - yi) 2 (z - zi) 2). För effektivitet, använd inte Math. sqrt () eller Math. pow (). Med tanke på positionerna och massorna i en sekvens av objekt, skriv ett program för att beräkna deras centrum-of-mass eller centroid. Centroid är den genomsnittliga positionen för n-objekten, viktat i vikt. Om positionerna och massorna ges av (xi. Yi. Mi), ges centroid (x. Y. M) genom att: Skriv ett program Centroid. java som läser i en sekvens av positioner och massor (xi. Yi. mi) från standardinmatning och skriver ut deras masscentrum (x. y. m). Antydan . modell ditt program efter Average. java. Skriv ett program Checkerboard. java som tar ett kommandoradsargument n och visar en n-by-n-kontrollpanel med röda och svarta rutor. Färga den nedre vänstra rutans röda. Skriv ett program Rose. java som tar ett kommandoradsargument n och plottar en ros med n kronblad (om n är udda) eller 2n kronblad (om n är jämn) genom att plotta polärkoordinaterna (r, theta) av funktionen r synd (n gånger theta) för theta som sträcker sig från 0 till 2pi radianer. Nedan är önskad utgång för n 4, 7 och 8. Skriv ett program Banner. java som tar en sträng s från kommandoraden och visar den i banderollstylen på skärmen, flyttar från vänster till höger och omsluter tillbaka till början av strängen när slutet är uppnått. Lägg till ett andra kommandoradsargument för att styra hastigheten. Skriv ett program Circles. java som drar fyllda cirklar av slumpmässig storlek i slumpmässiga positioner i enhetstorget, vilket ger bilder som nedan. Ditt program ska ta fyra kommandoradsargument: antalet cirklar, sannolikheten för att varje cirkel är svart, minsta radie och maximal radie. Kreativa övningar Spirographs. Skriv ett program Spirograph. java som tar tre kommandoradsargument R, r och a och drar den resulterande spirografen. En spirograph (tekniskt en epicykloid) är en kurva som bildas genom att rulla en cirkel med radie r runt en större fast cirkel eller radie R. Om penna förskjutna från centrum av rullcirkeln är (ra), då motsvarar den resulterande kurva vid tidpunkt t ges av Sådana kurvor populariserades av en bästsäljande leksak som innehåller skivor med växeltänder på kanterna och små hål som du kan lägga in en penna för att spåra spirografer. För en dramatisk 3d-effekt, rita en cirkulär bild, t. ex. earth. gif istället för en punkt och visa att den roterar över tiden. Här är en bild av den resulterande spirografen när R 180, r 40 och en 15. Klocka. Skriv ett program Clock. java som visar en animering av andra, minut och timmars händer på en analog klocka. Använd metoden StdDraw. show (1000) för att uppdatera displayen ungefär en gång per sekund. Antydan . Detta kan vara en av de sällsynta tiderna när du vill använda operatören med en dubbel - det fungerar som du förväntar dig. Oscilloskop. Skriv ett program Oscilloscope. java för att simulera utsignalen från ett oscilloskop och producera Lissajous mönster. Dessa mönster är uppkallade efter den franska fysikern Jules A. Lissajous, som studerade de mönster som uppstår när två ömsesidigt vinkelräta periodiska störningar uppträder samtidigt. Antag att ingångarna är sinusformade, så följande parametriska ekvationer beskriver kurvan: Ta de sex parametrarna A x. w x. theta x. theta y. w y. och theta y från kommandoraden. Till exempel har den första bilden nedan Ax Ay 1, w x 2, w y 3, theta x 20 grader, theta y 45 grader. Den andra har parametrar (1, 1, 5, 3, 30, 45) Webben övningar Ord och linjeräkning. Ändra WordCount. java så det läser i text från standardinmatning och skriver ut antalet tecken, ord och rader i texten. Regnproblem. Skriv ett program Rainfall. java som läser i nonnegative heltal (representerande nederbörd) en i taget fram till 999999 skrivs in och sedan skriver ut genomsnittsvärdet (ej 999999). Ta bort dubbletter. Skriv ett program Duplicates. java som läser i en sekvens av heltal och skriver ut hela talen, förutom att det tar bort upprepade värden om de visas i följd. Om ingången till exempel är 1 2 2 1 5 1 1 7 7 7 7 1 1, ska ditt program skriva ut 1 2 1 5 1 7 1. Körlängdskodning. Skriv ett program RunLengthEncoder. java som kodar för en binär ingång med körlängds kodning. Skriv ett program RunLengthDecoder. java som avkodar ett körlängdskodat meddelande. Huvud och svans. Skriv program Head. java och Tail. java som tar ett heltal kommandoradsinmatning N och skriv ut de första eller sista N-raderna i den givna filen. (Skriv ut hela filen om den består av till exempel meddelandet VENI, VIDI, VICI konverteras till YHQL, YLGL, YLFL. Skriv ett program Caesar. java som tar ett kommandoradsargument k och tillämpar en Caesar-chiffer med shift k till en sekvens bokstäver läsas från standardinmatningen. Om ett brev inte är en stor bokstav, skriv det helt enkelt ut igen. Caesar-kodning av avkodning. Hur skulle du avkoda ett meddelande som krypteras med en Caesar-krypteringstips. Du borde inte behöva skriva mer kod Paritetskontroll En boolesk matris har paritetsegenskapen när varje rad och varje kolumn har en jämn summa. Det här är en enkel typ av felkorrigeringskod eftersom om en bit är skadad i överföringen (bit vänds från 0 till 1 eller från 1 till 0) Det kan detekteras och repareras. Här är en 4 x 4 inmatningsfil som har paritetsegenskapen: Skriv ett program ParityCheck. java som tar ett heltal N som en kommandoradsinmatning och läser i en N-by-N Boolean matris från standardinmatning och utgångar om (i) matrisen har paritetsegenskapen , eller (ii) indikerar vilken enskild korrumperad bit (i, j) kan vändas för att återställa paritetsegenskapen, eller (iii) indikerar att matrisen var skadad (mer än två bitar skulle behöva ändras för att återställa paritetsegenskapen) . Använd så liten intern lagring som möjligt. Tips: Du behöver inte ens lagra matris Takagis-funktionen. Plot Takagis funktion: Överallt kontinuerlig, ingenstans differentierbar. Hitchhiker problem. Du intervjuar N kandidater för den enda positionen för American Idol. Varje minut får du se en ny kandidat, och du har en minut för att bestämma om du vill förklara personen American Idol eller ej. Du kanske inte ändrar dig när du avslutar intervjuar kandidaten. Antag att du omedelbart kan betygsätta varje kandidat med ett enda riktigt tal mellan 0 och 1, men du vet självklart inte betyget på kandidaterna som ännu inte setts. Utarbeta en strategi och skriv ett program AmericanIdol som har minst 25 chanser att välja den bästa kandidaten (förutsatt att kandidaterna kommer i slumpmässig ordning), läser 500 datavärden från standardinmatningen. Lösning: Intervju för N2 minuter och registrera värderingen av den bästa kandidaten som hittills hittats. På de närmaste N2-minuterna väljer du den första kandidaten som har en högre betyg än den inspelade. Detta ger minst 25 chans eftersom du kommer att få den bästa kandidaten om den näst bästa kandidaten kommer fram i de första N2-minuterna, och den bästa kandidaten kommer fram i de sista N2-minuten. Detta kan förbättras något till 1e 0,36788 genom att använda väsentligen samma strategi, men byter över vid tidpunkten Ne. Nested diamanter. Skriv ett program Diamonds. java som tar en kommandoradsinmatning N och plottar N nästa rutor och diamanter. Nedan visas önskad utgång för N 3, 4 och 5. Regelbundna polygoner. Skapa en funktion för att plotta en N-gon, centrerad på (x, y) med längd s. Använd funktionen för att rita nollade polygoner som bilden nedan. Bulging rutor. Skriv ett program BulgingSquares. java som drar följande optiska illusion från Akiyoshi Kitaoka Centret verkar bukta utåt trots att alla rutor är lika stora. Spirrande möss. Antag att N-möss som startar på en regelbunden polygon med N-sidor, och de vetter mot den närmsta andra musen (moturs) tills de alla möts. Skriv ett program för att rita de logaritmiska spiralvägarna som de spårar ut genom att dra nestade N-gons, roteras och krympas som i denna animering. Spiral. Skriv ett program för att rita en spiral som den nedan. Klot. Skriv ett program Globe. java som tar ett riktigt kommandoradsargument alpha och plottar ett klotliknande mönster med parameter alpha. Plot the polar coordinates (r, theta) of the function f(theta) cos(alpha times theta) for theta ranging from 0 to 7200 degrees. Below is the desired output for alpha 0.8, 0.9, and 0.95. Drawing strings. Write a program RandomText. java that takes a string s and an integer N as command line inputs, and writes the string N times at a random location, and in a random color. 2D random walk. Write a program RandomWalk. java to simulate a 2D random walk and animate the results. Start at the center of a 2N-by-2N grid. The current location is displayed in blue the trail in white. Rotating table. You are seated at a rotating square table (like a lazy Susan), and there are four coins placed in the four corners of the table. Your goal is to flip the coins so that they are either all heads or all tails, at which point a bell rings to notify you that you are done. You may select any two of them, determine their orientation, and (optionally) flip either or both of them over. To make things challenging, you are blindfolded, and the table is spun after each time you select two coins. Write a program RotatingTable. java that initializes the coins to random orientations. Then, it prompts the user to select two positions (1-4), and identifies the orientation of each coin. Next, the user can specify which, if any of the two coins to flip. The process repeats until the user solves the puzzle. Rotating table solver. Write another program RotatingTableSolver. java to solve the rotating table puzzle. One effective strategy is to choose two coins at random and flip them to heads. However, if you get really unlucky, this could take an arbitrary number of steps. Goal: devise a strategy that always solves the puzzle in at most 5 steps. Hex. Hex is a two-player board game popularized by John Nash while a graduate student at Princeton University, and later commercialized by Parker Brothers. It is played on a hexagonal grid in the shape of an 11-by-11 diamond. Write a program Hex. java that draws the board. Projectile motion with drag. Write a program BallisticMotion. java that plots the trajectory of a ball that is shot with velocity v at an angle theta. Account for gravitational and drag forces. Assume that the drag force is proportional to the square of the velocity. Using Newtons equations of motions and the Euler-Cromer method, update the position, velocity, and acceleration according to the following equations: Use G 9.8, C 0.002, and set the initial velocity to 180 and the angle to 60 degrees. Heart. Write a program Heart. java to draw a pink heart: Draw a diamond, then draw two circles to the upper left and upper right sides. Changing square. Write a program that draws a square and changes its color each second. Simple harmonic motion. Repeat the previous exercise, but animate the Lissajous patterns as in this applet. Ex: A B w x w y 1, but at each time t draw 100 (or so) points with phi x ranging from 0 to 720 degrees, and phi x ranging from 0 to 1080 degrees. Bresenhams line drawing algorithm. To plot a line segment from (x1, y1) to (x2, y2) on a monitor, say 1024-by-1024, you need to make a discrete approximation to the continuous line and determine exactly which pixels to turn on. Bresenhams line drawing algorithm is a clever solution that works when the slope is between 0 and 1 and x1 Modify Bresenhams algorithm to handle arbitrary line segments. Millers madness. Write a program Madness. java to plot the parametric equation: where the parameter t is in radians. You should get the following complex picture. Experiment by changing the parameters and produce original pictures. Fays butterfly. Write a program Butterfly. java to plot the polar equation: where the parameter t is in radians. You should get an image like the following butterfly-like figure. Experiment by changing the parameters and produce original pictures. Student database. The file students. txt contains a list of students enrolled in an introductory computer science class at Princeton. The first line contains an integer N that specifies the number of students in the database. Each of the next N lines consists of four pieces of information, separated by whitespace: first name, last name, email address, and section number. The program Students. java reads in the integer N and then N lines of data of standard input, stores the data in four parallel arrays (an integer array for the section number and string arrays for the other fields). Then, the program prints out a list of students in section 4 and 5. Shuffling. In the October 7, 2003 California state runoff election for governor, there were 135 official candidates. To avoid the natural prejudice against candidates whose names appear at the end of the alphabet (Jon W. Zellhoefer), California election officials sought to order the candidates in random order. Write a program program Shuffle. java that takes a command-line argument N, reads in N strings from standard input, and prints them back out in shuffled order. (California decided to randomize the alphabet instead of shuffling the candidates. Using this strategy, not all N possible outcomes are equally likely or even possible For example, two candidates with very similar last names will always end up next to each other.) Reverse. Write a program Reverse. java that reads in an arbitrary number of real values from standard input and prints them in reverse order. Time series analysis. This problem investigates two methods for forecasting in time series analysis. Moving average or exponential smoothing. Polar plots. Create any of these polar plots. Java games. Use StdDraw. java to implement one of the games at javaunlimited. Consider the following program. Suppose the file input. txt contains the following integers: What is the contents of the array a after running the following command High-low. Shuffle a deck of cards, and deal one to the player. Prompt the player to guess whether the next card is higher or lower than the current card. Repeat until player guesses it wrong. Game show. used this. Elastic collisions. Write a program CollidingBalls. java that takes a command-line argument n and plots the trajectories of n bouncing balls that bounce of the walls and each other according to the laws of elastic collisions. Assume all the balls have the same mass. Elastic collisions with obstacles. Each ball should have its own mass. Put a large ball in the center with zero initial velocity. Brownian motion. Statistical outliers. Modify Average. java to print out all the values that are larger than 1.5 standard deviations from the mean. You will need an array to store the values. Optical illusions. Create a Kofka ring or one of the other optical illusions collected by Edward Adelson. Computer animation. In 1995 James Gosling presented a demonstration of Java to Sun executives, illustrating its potential to deliver dynamic and interactive Web content. At the time, web pages were fixed and non-interactive. To demonstrate what the Web could be, Gosling presented applets to rotate 3D molecules, visualize sorting routines, and Duke cart-wheeling across the screen. Java was officially introduced in May 1995 and widely adopted in the technology sector. The Internet would never be the same. Program Duke. java reads in the 17 images T1.gif through T17.gif and produces the animation. To execute on your computer, download the 17 GIF files and put in the same directory as Duke. java . (Alternatively, download and unzip the file duke. zip or duke. jar to extract all 17 GIFs.) Cart-wheeling Duke. Modify Duke. java so that it cartwheels 5 times across the screen, from right to left, wrapping around when it hits the window boundary. Repeat this cart-wheeling cycle 100 times. Antydan . after displaying a sequence of 17 frames, move 57 pixels to the left and repeat. Name your program MoreDuke. java. Tac (cat backwards). Write a program Tac. java that reads lines of text from standard input and prints the lines out in reverse order. Game. Implement the game dodge using StdDraw . move a blue disc within the unit square to touch a randomly placed green disc, while avoiding the moving red discs. After each touch, add a new moving red disc. Simple harmonic motion. Create an animation like the one below from Wikipedia of simple harmonic motion. Yin yang. Draw a yin yang using StdDraw. arc() . Twenty questions. Write a program QuestionsTwenty. java that plays 20 questions from the opposite point of view: the user thinks of a number between 1 and a million and the computer makes the guesses. Use binary search to ensure that the computer needs at most 20 guesses. Write a program DeleteX. java that reads in text from standard input and deletes all occurrences of the letter X. To filter a file and remove all Xs, run your program with the following command: Write a program ThreeLargest. java that reads integers from standard input and prints out the three largest inputs. Write a program Pnorm. java that takes a command-line argument p, reads in real numbers from standard input, and prints out their p-norm . The p-norm norm of a vector (x 1 . x N ) is defined to be the pth root of (x 1 p x 2 p . x N p ). Consider the following Java program. Suppose that the file input. txt contains the integers 1 and 1. What does the following command do Modify Add. java so that it re-asks the user to enter two positive integers if the user types in a non-positive integer. Modify TwentyQuestions. java so that it re-asks the user to enter a response if the user types in something other than true or false . Hint: add a do-while loop within the main loop. Nonagram. Write a program to plot a nonagram. Star polygons. Write a program StarPolygon. java that takes two command line inputs p and q, and plots the - star polygon. Complete graph. Write a program to plot that takes an integer N, plots an N-gon, where each vertex lies on a circle of radius 256. Then draw a gray line connecting each pair of vertices. Necker cube. Write a program NeckerCube. java to plot a Necker cube. What happens if you move the StdDraw. clear(Color. BLACK) command to before the beginning of the while loop in BouncingBall. java. Svar. try it and observe a nice woven 3d pattern with the given starting velocity and position. What happens if you change the parameter of StdDraw. show() to 0 or 1000 in BouncingBall. java. Write a program to plot a circular ring of width 10 like the one below using two calls to StdDraw. filledCircle() . Write a program to plot a circular ring of width 10 like the one below using a nested for loop and many calls to StdDraw. point() . Write a program to plot the Olympic rings. Write a program BouncingBallDeluxe. java that embellishes BouncingBall. java by playing a sound effect upon collision with the wall using StdAudio and the sound file pipebang. wav. Last modified on February 20, 2017. Copyright copy 2000ndash2016 Robert Sedgewick and Kevin Wayne. Alla rättigheter förbehållna.
Comments
Post a Comment