Maurer vstal - Maurer rose
v geometrie, pojem a Maurer vstal představil Peter M. Maurer ve svém článku s názvem Růže je růže ...[1]. Maurerova růže se skládá z několika linií, které spojují některé body na a růžová křivka.
Definice
Nechat r = hřích (nθ) být a růže v polární souřadnicový systém, kde n je kladné celé číslo. Růže má n okvětní lístky, pokud n je liché a 2n okvětní lístky, pokud n je sudý.
Poté vezmeme 361 bodů na růži:
- (hřích(nk), k) (k = 0, d, 2d, 3d, ..., 360d),
kde d je kladné celé číslo a úhly jsou v stupňů, ne radiány.
Vysvětlení
A Maurer vstal růže r = hřích (nθ) se skládá z 360 čar postupně spojujících výše uvedených 361 bodů. Maurerova růže je tedy a polygonální křivka s vrcholy na růži.
Maurerovu růži lze popsat jako uzavřenou cestu v polární rovina. Chodec začíná cestu od počátku (0, 0) a kráčí po přímce k bodu (sin (nd), d). Poté ve druhé části cesty kráčí chodec po čáře k dalšímu bodu (sin (n·2d), 2d), a tak dále. Nakonec chodec chodí po závěrečné části cesty po čáře od (sin (n·359d), 359d) do konečného bodu, (sin (n·360d), 360d). Celá trasa je Maurerova růže z růže r = hřích (nθ). Maurerova růže je uzavřená křivka od počátečního bodu (0, 0) a konečného bodu (sin (n·360d), 360d), shodovat se.
Následující obrázek ukazuje vývoj Maurerovy růže (n = 2, d = 29°).
snímky
Následuje několik Maurerových růží nakreslených s některými hodnotami na na d:
Příklady syntaxe
JavaScriptový kód
// Kotle, někde musím být, že?dokument.tělo.innerHTML = ''; // Odstraní stránku s jejími věcmi, pro případ, že byste ji chtěli vložit do konzoly na nové kartě nebo opravdu kamkoli.konst plátno = dokument.createElement('plátno');plátno.šířka = 800;plátno.výška = 800;dokument.tělo.appendChild(plátno);konst ctx = plátno.getContext('2d');// Dobře, čas růže.nechat n = 6, d = 71; // Mohou to být libovolné kombinace, ale tato je hezká.ctx.přeložit(plátno.šířka / 2, plátno.výška / 2);ctx.beginPath();ctx.šířka čáry = 0.5;ctx.styl mrtvice = 'modrý';pro (nechat theta = 0; theta <= 360 / * pracujeme s tituly, pamatuješ? * /; theta++){ nechat k = theta * d * Matematika.PI / 180; nechat r = 300 * Matematika.hřích(n * k); nechat X = -r * Matematika.cos(k); nechat y = -r * Matematika.hřích(k); ctx.lineTo(X, y); ctx.Přesunout do(X, y);}ctx.mrtvice();ctx.beginPath();ctx.šířka čáry = 4;ctx.styl mrtvice = 'Červené';pro (nechat theta = 0; theta <= 360; theta++){ nechat k = theta * Matematika.PI / 180; nechat r = 300 * Matematika.hřích(n * k); nechat X = r * Matematika.cos(k); nechat y = -r * Matematika.hřích(k); ctx.lineTo(X, y); ctx.Přesunout do(X, y);}ctx.mrtvice();
Kód Java
Existuje lepší způsob, jak to udělat. Ale toto je celý soubor Java, který kreslí Maurerovu růži.
import javax.swing. *;import java.awt. *;import událost java.awt. *;třída Renderer rozšiřuje JPanel { chráněný prázdnota paintComponent(Grafika G) { Maurer.maurer.kreslit((Graphics2D) G); }}veřejnost třída Maurer nářadí ActionListener { statický Maurer maurer; statický finále int šířka = 800, výška = 800; Renderer vykreslovač = Nový Renderer(); statický dvojnásobek n = 6, d = 71; veřejnost Maurer() { JFrame rám = Nový JFrame("maurerova růže"); rám.setSize(šířka, výška); rám.přidat(vykreslovač); rám.setDefaultCloseOperation(3); rám.setResizable(Nepravdivé); rám.setVisible(skutečný); Časovač časovač = Nový Časovač(0, tento); časovač.Start(); } veřejnost prázdnota akce Provedeno(ActionEvent evt) { vykreslovač.překreslit(); } veřejnost prázdnota kreslit(Graphics2D G) { G.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); G.setColor(Barva.bílý); G.fillRect(0, 0, šířka, výška); G.setColor(Nový Barva(0, 0, 255, 100)); G.přeložit(šířka / 2, výška / 2); dvojnásobek X = 0, y = 0; pro (int theta = 0; theta <= 360; theta++) { dvojnásobek k = theta * d * Matematika.PI / 180; dvojnásobek r = 300 * Matematika.hřích(n * k); dvojnásobek novýX = r * Matematika.cos(k); dvojnásobek novýY = r * Matematika.hřích(k); G.drawLine((int)X, (int)y, (int)novýX, (int)novýY); X = novýX; y = novýY; } G.setColor(Barva.Červené); G.setStroke(Nový BasicStroke(4)); pro (int theta = 0; theta <= 360; theta++) { dvojnásobek k = theta * Matematika.PI / 180; dvojnásobek r = 300 * Matematika.hřích(n * k); dvojnásobek novýX = r * Matematika.cos(k); dvojnásobek novýY = r * Matematika.hřích(k); G.drawLine((int)X, (int)y, (int)novýX, (int)novýY); X = novýX; y = novýY; } } veřejnost statický prázdnota hlavní(Tětiva[] args) { maurer = Nový Maurer(); }}
Kód jazyka Visual Basic 6
n = 7; d = 29 Xo = 400 'Původ Yo = 350 pi = 22/7 DrawWidth = 1 Pro theta = 0 až 360 k = theta * d * pi / 180 r = 300 * Sin (n * k) x = Xo - r * Cos (k) y = Yo - r * Sin (k) Line - (x, y), QBColor (9) Next DrawWidth = 2 For theta = 0 To 360 k = theta * pi / 180 r = 300 * Sin (n * k) x = Xo + r * Cos (k) y = Yo - r * Sin (k) řádek - (x, y), QBColor (12) Další
Zpracování kódu
plovák n = 6;plovák d = 71;velikost(800, 800);noFill();Pozadí(255);beginShape();mrtvice(0, 0, 255);hmotnost(0.5);pro(int theta = 0; theta <= 360; theta++){ plovák k = theta * d * PI / 180; plovák r = 300 * hřích(n * k); plovák X = r * cos(k) + šířka/2; plovák y = r * hřích(k) + výška/2; vrchol(X, y);}endShape();beginShape();mrtvice(255, 0, 0);zdvih Váha(4);pro(int theta = 0; theta <= 360; theta++){ plovák k = theta * PI / 180; plovák r = 300 * hřích(n * k); plovák X = r * cos(k) + šířka/2; plovák y = r * hřích(k) + výška/2; vrchol(X, y);}endShape();
Kód p5.js
/*p5.js je port pro zpracování, který lze spustit v prohlížeči. Pokud přejdete na editor.p5js.org, vymažete tam kód, vložíte ho a stisknete tlačítko Přehrát, můžete jej spustit. Bylo přidáno uživatelské rozhraní, aby mohli vybrat hodnoty „n“ a „d“ a také změnit vzorec z sin na kteroukoli ze 6 základních trigových funkcí (Poznámka: platná Maurer Rose je pouze sinusová funkce) * /nechat n;nechat d;funkce založit() { createCanvas(400, 400); // nastaví posuvník pro n sliderPetals = createSlider(1,100,6); sliderPetals.styl('šířka', 300px); sliderPetals.pozice(30,výška+5); // nastaví posuvník pro d sliderD = createSlider(1,360,71); sliderD.styl('šířka', 300px); sliderD.pozice(30,výška+30); // nastaví možnosti rádia pro vzorec úhlu úhel Volby = createRadio(); úhel Volby.pozice(10, 460); úhel Volby.volba('hřích'); úhel Volby.volba('cos'); úhel Volby.volba('opálení'); úhel Volby.volba('sec'); úhel Volby.volba('csc'); úhel Volby.volba('dětská postýlka'); úhel Volby.styl('šířka', '60px'); // snižuje počet výpočtů, které musí váš prohlížeč provádět snímková frekvence(3);}funkce kreslit() { n = sliderPetals.hodnota(); d = sliderD.hodnota(); Pozadí(255); tlačit(); noFill(); beginShape(); mrtvice(0, 0, 255); zdvih Váha(0.5); úhelMode(STUPŇŮ); přeložit(šířka/2, výška/2); pro(nechat theta = 0; theta <= 360; theta++){ nechat k = theta * d; nechat r = šířka/2 * formule úhlu(n,k); nechat X = r * cos(k); nechat y = r * hřích(k); vrchol(X, y); } endShape(); beginShape(); mrtvice(255, 0, 0); hmotnost(2); pro(nechat theta = 0; theta <= 360; theta++){ nechat k = theta; nechat r = šířka/2 * formule úhlu(n,k); nechat X = r * cos(k); nechat y = r * hřích(k); vrchol(X, y); } endShape(); pop(); mrtvice(255); textFont(„Gruzie“, 20); text('N (#Petals):' + str(n), 10,20); text('D:' + str(d), 10, 50);}funkce formule úhlu(n,k) { přepínač(úhel Volby.hodnota()) { případ "hřích": vrátit se hřích(k*n); případ "cos": vrátit se cos(k*n); případ "opálení": vrátit se opálení(k*n); případ "csc": vrátit se (1/hřích(k*n)); případ "sec": vrátit se (1/cos(k*n)); případ "dětská postýlka": vrátit se (1/opálení(k*n)); výchozí: vrátit se hřích(k*n); }}
Pythonský kód
Python není příliš efektivní, pokud jde o kreslení, takže to chvíli trvá. Růže ale díky způsobům Turtle Graphics nebude vzhůru nohama, jako by to bylo ve většině ostatních jazyků.
import matematika, želvaobrazovka = želva.Obrazovka()obrazovka.založit(šířka=800, výška=800, startx=0, starty=0)obrazovka.bgcolor('Černá')pero = želva.Želva()pero.Rychlost(20)n = 5d = 97pero.barva('modrý')pero.myslet(0.5)pro theta v rozsah(361): k = theta * d * matematika.pi / 180 r = 300 * matematika.hřích(n * k) X = r * matematika.cos(k) y = r * matematika.hřích(k) pero.jít do(X, y)pero.barva('Červené')pero.myslet(4)pro theta v rozsah(361): k = theta * matematika.pi / 180 r = 300 * matematika.hřích(n * k) X = r * matematika.cos(k) y = r * matematika.hřích(k) pero.jít do(X, y)
C ++ kód
Vyžaduje se SFML
#zahrnout „SFML / System.hpp“#zahrnout „SFML / Graphics.hpp“#zahrnout „SFML / Audio.hpp“#zahrnout „SFML / Window.hpp“#zahrnout <iostream>#zahrnout <math.h># define M_PI 3.14159265358979323846int hlavní() { int n = 6; int d = 71; sf::RenderWindow Okno(sf::Režim videa(800, 800), "Rose Test", sf::Styl::Zavřít ); sf::VertexArray Růže(sf::Primitivní typ::Čáry); sf::VertexArray Obrys(sf::Primitivní typ::Čáry); Okno.setFramerateLimit(30); zatímco (Okno.je otevřeno()) { sf::událost událost; zatímco (Okno.pollEvent(událost)) { přepínač (událost.typ) { případ sf::událost::Zavřeno: Okno.zavřít(); přestávka; } } pro (int i = 0; i <= 360; i++) { dvojnásobek k = i * d * M_PI / 180; dvojnásobek r = 300 * hřích(n * k); dvojnásobek X = -r * cos(k); dvojnásobek y = -r * hřích(k); Růže.připojit(sf::Vrchol(sf::Vector2f(X + Okno.getSize().X / 2, y + Okno.getSize().y / 2), sf::Barva::Modrý)); } pro (int i = 0; i <= 360; i++) { dvojnásobek k = i * M_PI / 180; dvojnásobek r = 300 * hřích(n * k); dvojnásobek X = r * cos(k); dvojnásobek y = -r * hřích(k); Obrys.připojit(sf::Vrchol(sf::Vector2f(X + Okno.getSize().X / 2, y + Okno.getSize().y / 2), sf::Barva::Červené)); } Okno.Průhledná(sf::Barva::Bílý); Okno.kreslit(Růže); Okno.kreslit(Obrys); Okno.Zobrazit(); } vrátit se 0;}
Reference
- Maurer, Peter M. (srpen – září 1987). „Růže je růže ...“ Americký matematický měsíčník. 94 (7): 631–645. doi:10.2307/2322215. JSTOR 2322215.
- Weisstein, Eric W. "Maurerovy růže". MathWorld. (Interaktivní ukázky)
Externí odkazy
Interaktivní ukázka: https://codepen.io/Igor_Konovalov/full/ZJwPQv/ Hudební přehrávač : https://labo86.fr/