

JavaFX - Jak rozdělit oblouk (Arc) na pětiny?
Dobrý den,
Potřebuji rozdělit Arc.
Když např. zadám
...
Arc arc = new Arc(700, 700, 500, 500, 90, 90);
arc.setFill(Color.TRANSPARENT);
arc.setStroke(Color.BLACK);
...
jak ho rozdělím na pětiny? U čáry je to jednoduché, ale tady to nelze pouze vydělit.
Každá část má 18 stupňů, ale jak vypočítám, kde na oblouku jsou odděleny jednotlivé části.
Prosím Vás o radu,
Děkuji
V konstruktoru přece definuješ počáteční úhel a délku oblouku
Oblouk je jeden a nic se na tom nezmění.
Ale potřebuji pouze určit místa, které by oblouk rozdělili na pětiny.
Určitě to jde nějak matematicky vypočítat, ale netuším jak.
A co ti brání místo jednoho oblouku udělat pět menších?
jistě znáš rovnici obecné kružnice:
Pokud si dokážeš spočíst, v jakých úhlech má být oblouk rozdělen, jistě spočítáš i umístění bodů na tomto oblouku.
To jsem tu měl původně taky a i konkrétněji, ale pak jsem si uvědomil, že to v tomhle případě vůbec není potřeba.
Nebo jsem neco nepochopil?
Asi jsme to nepochopili dva, protože mi to taky přijde naprosto primitivní.
Asi tak...
@MichalDM: setStrokeType(StrokeType.INSIDE) - vsude vyhod a bude to jeste hezci, bez tech nepeknych mezer...
Já jsem to pochopil tak, že přes to chce malovat něco jiného, např. úsečky.
Ale zřejmě to byl ten první případ, protože tazatel se už nevyjadřuje - zřejmě si své vyřešil, a na nás háže bobek.
Omlouvám se, ale dnes jsem nemohl.
Ano, šlo mi o kreslení úseček. Ale proto potřebuji znát dvě souřadnice. První je automaticky střed a druhé je pozice "místa" na oblouku, kde jsou rozděleny jednotlivé části.
Když si nakreslím úsečku pod požadovaným úhlem a v místě, kde se dotýká oblouku, udělám kolmici na spodní hranu, tak mi vyjde pravoúhlý trojúhelník. U něho znám všechny úhly, délku přepony a zbytek dopočítám
Děkuji
Souřadnice bodu na kružnici pro daný střed (x0, y0) úhel (alfa) a poloměr kružnice (r) máš zde:
Stačí dosadit.
edit: maximálně bude třeba "pootočit" úhel, pokud je logika kreslení příkazu Arc jiná, než u goniometrických funkcí (nevím, JavaFX neznám, tak na to raději upozorním)
Prosím tě, jak to mám zadat?
Tohle vůbec nevychází
Co má být za úhel těch 1.617? Je to něco přes 92 stupňů.
Proč je tam teda fí(1.617)?
Když v kódu, co jsem výše napsal, změním sin na cos, tak tam můžu dosadit přímo 18 stupňů.
Nechápu, jak to vzorce použít. Navíc, nepochopil jsem to "pootočení".
Počkej, ty se ptáš mně, proč jsi tam zadal tenhle úhel? Jak to mám vědět?
Math.cos a Math.sin pracují v radiánech. Pokud chceš používat stupně, tak použij:
Vysvětlím to pootočení: Každý úhel "někde" začíná. U matematických funkcí sin/cos je to jasné, úzus uvádí nejvíce pravý bod na jednotkové kružnici (0° odpovídá ose X). Ovšem kde má 0° funkce, kterou používáš pro vykreslení oblouku, to nevím. Teoreticky by to mělo být totožné, ale nevím to, a právě proto jsem ti to napsal.
Takhle lze rozdělit 90° oblouk (čtvrt kruhu) na 5 částí. Omlouvám se, ale výpočet výše je chybný, protože metodě sin je nutné zadat parametr v radiánech.
Takhle vytvořím čtvrtinu "koláče" rozdělenou na pětiny.
Co se týče tvého pootočení, určuje to pátý parametr a funguje to jak u minutové ručičky. Takže v příkladu výše, je to celé něco jako "část hodin" od 0 do 15.
Pokud to chcete jinak otočené, tak je nutné, v kódu výše, změnit
"15-30"
"30-45"
"45-60"
Doufám, že jsem tam neudělal chybu.
A teď mi, prosím Vás, řekněte, jak bych využil ty vzorce respektive, jestli by to šlo zjednodušit.
Děkuji
popsal jsi toho spousty, ale nic jsi vlastně nesdělil, kromě toho, že funkce Arc zřejmě maluje v obráceném směru, než fungují sinus a cosinus.
už chápeš?
Spíš to souvisí s tím, že osa y je v počítačové grafice obrácená. Levý horní roh má souřadnice [0, 0] a pravý dolní např. [1919, 1079]. V běžném zobrazení by měl mít spíš [1919, -1079].
Tohle přece záleží na implementaci, ne?
Právě proto jsem tam psal, že si to musí upravit.
Tak jsem udělal chybu. Kód výše sice přesně vyznačí část kruhu, ale dělící čáry nakreslí špatně. Tenhle kód je už doufám správný.
A tímhle bych to konečně uzavřel. Díky všem.