Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno JavaFX - Jak vypočítat souřadnice po otočení?

Dobrý den,

Nakreslím např. 2 trojúhelníky pomocí třídy Path

var triangle1 = new Path(new MoveTo(0, 400), new LineTo(0, 300), new LineTo(100, 300), new LineTo(0, 400));
var triangle2 = new Path(new MoveTo(0, 400), new LineTo(0, 300), new LineTo(100, 300), new LineTo(0, 400));

a druhý otočím

triangle2.getTransforms().add(new Rotate(180, 540, 540)); // 540 je polovina výšky displeje

Problém je, že při získání souřadnic to vrátí 0,

System.out.println(((MoveTo)triangle.getElements().get(0)).getX());
System.out.println(((MoveTo)triangle2.getElements().get(0)).getX());

protože byly tak vytvořeny. Ale otočením se souřadnice triangle2 změnili.

Jak to, prosím Vás vypočítám, když vím počáteční souřadnice, úhel otočení a výšku displeje?

Děkuji

Předmět Autor Datum
Všechny ty transformace jsou pouze násobení matic a počátečního vektoru: https://cs.wikipedia.org/wi…
Wikan 15.12.2019 18:12
Wikan
Promiňte, ale matice nejsou můj šálek kávy. Navíc, článek na wikipedii není zrovna perfektní. Mohl…
MichalDM 17.12.2019 23:52
MichalDM
No tak když neumíš používat matice, tak si to nakresli na papír a uvidíš tam pravoúhlý trojúhelník.…
Wikan 18.12.2019 08:03
Wikan
Existuje mnohem jednoduší způsob. Respektive dva 1. Použít u objektu localtoscene nebo localtoscree… poslední
MichalDM 27.12.2019 11:14
MichalDM

Existuje mnohem jednoduší způsob. Respektive dva

1. Použít u objektu localtoscene nebo localtoscreen - viz zde

Jak už je patrné z názvu, vrátí ti to skutečnou pozici buď ke scene nebo k obrazovce, ale pokud máš scene na full screen, tak je výsledek stejný.

Nicméně, tento postup ti vrátí min a max souřadnice v ose x. A pokud chceš získat specifický bod na objektu, tak je to nevhodné.

Proto je, v tomhle případě, lepší

2. Použít u objektu localToParent

var triangle2_x = ((MoveTo)triangle2.getElements().get(0)).getX();
var triangle2_y = ((MoveTo)triangle2.getElements().get(0)).getY();
var triangle3_x = ((MoveTo)triangle3.getElements().get(0)).getX();
var triangle3_y = ((MoveTo)triangle3.getElements().get(0)).getY();
System.out.println(triangle2.localToParent(triangle2_x, triangle2_y));
System.out.println(triangle3.localToParent(triangle3_x, triangle3_y));

Zpět do poradny Odpovědět na původní otázku Nahoru