Rysowanie grotu strzałki na obiekcie Graphics

Odpowiedz Nowy wątek
2008-05-05 14:11
0

Witam.

Zagadnienie niby proste, alew praktyce wcale nie trywialne. Chodzi mi o to, aby mając linię zadeklarowaną w sposób: (x1, y1) (x2, y2) narysować ją na obiekcie Graphics (bądź Graphics2D), a następnie dorysować na jej końcu grot strzałki (wystarczą dwie kreski pod odpowiednim kątem). Nie widziałem takiej opcji w standardowym pakiecie klas Javy, więc szukam NAJPROSTSZEGO rozwiązania używając jak najmniej obliczeń. Oczywiście rozwiązanie ma działać dla linii pod narysowanych pod każdym kątem.

Macie jakieś pomysły?

Z góry thx.

P.S. Zamierzony efekt (aby nie było niedomówień ;-) ): user image


"A wise man questions contains half an answer"

Pozostało 580 znaków

2008-05-05 18:23
0

a jaki widzisz problem z wyznaczeniem równania kierunkowego prostej i potem wyznaczenie dwóch prostych nachylonych do niej pod odpowiednim kątem? Przecież to poziom wykresu funkcji (chyba gimnazjum)


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2008-05-05 19:21
0

A jeszcze łatwiej Narysować strzałkę tak jak pokazałeś a potem zastosować transformację dla wszystkich końców owych trzech prostych. Wzory na obracanie w przestrzeni o zadany kąt nie są skomplikowane i ogólnodostępne na sieci.


<span style="color: blue">"Kolarstwo to jedna z najtrudniejszych dyscyplin sportu. Nawet najgorszy kolarz jest wciąż wybitnym sportowcem."
s.p. Marco Pantani
</span>

Pozostało 580 znaków

2008-05-05 19:25
0

Oleksy_Adam: dzięki za informację. Była o wiele pomocniejsza niż wymądrzanie matematyka. Znalazłem gdzieś trochę kodu napisanego w Delphi i przerobienie go zajęło mi 2 minuty:

import java.awt.Graphics;
import java.awt.geom.Point2D;

public class Test extends java.applet.Applet {
    public void paint(Graphics g) {
        double x[] = new double[3];
        double y[] = new double[3];

        Point2D p = new Point2D.Double(50, 50);
        Point2D k = new Point2D.Double(400, 90);

        double arc = Math.atan2(-k.getY() + p.getY(), k.getX() - p.getX());

        double r = Math.sqrt(Math.pow(k.getX() - p.getX(), 2) + Math.pow(k.getY() - p.getY(), 2)) * 0.95;

        x[0] = p.getX() + Math.round(r * Math.cos(arc + 0.015));
        y[0] = p.getY() + Math.round(r * -Math.sin(arc + 0.015));
        x[1] = p.getX() + Math.round(r * Math.cos(arc - 0.015));
        y[1] = p.getY() + Math.round(r * -Math.sin(arc - 0.015));
        x[2] = k.getX();
        y[2] = k.getY();

        g.drawLine((int) p.getX(), (int) p.getY(), (int) k.getX(), (int) k.getY());
        g.drawLine((int) x[0], (int) y[0], (int) x[2], (int) y[2]);
        g.drawLine((int) x[1], (int) y[1], (int) x[2], (int) y[2]);
    }
}

Być może nie jest optymalny, ale każdy chcący go zaadoptować do swoich potrzeb powinien już wiedzieć o co biega.

Pozdro!


"A wise man questions contains half an answer"

Pozostało 580 znaków

2008-05-05 20:47
0
baterman napisał(a)

Oleksy_Adam: dzięki za informację. Była o wiele pomocniejsza niż wymądrzanie matematyka. Znalazłem gdzieś trochę kodu napisanego w Delphi i przerobienie go zajęło mi 2 minuty:
ręce opadają... A do podtarcia sobie tyłka też potrzebujesz gotowy kod??


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2008-05-05 21:36
0

Chodziło jedynie o ukazanie Ci, drogi kolego, że każda rada (byle na temat) może pomóc w rozwiązaniu problemu o wiele bardziej niż teksty w klimacie "wygoogluj sobie" albo komentarze na temat trywialności solucji! Nikogo nie proszę o gotowe rozwiązanie - prosiłem o poradę na temat dostępnych możliwości. Chyba dość wyraźnie to sprecyzowałem A jeśli uważasz, że głupia odpowiedź na posta jest coś warta, to chyba błądzisz bardziej niż ja szukając pomocy wśród ludzi Twojego pokroju. I po co te dyskusje, gdy wystarczyło trochę życzliwości?

Uprzejmie proszę o wykasowanie całego posta bo mnie szlak trafia, jak coś takiego widzę, a dałem się ponieść emocjom za co przepraszam osoby czytające ten wątek.


"A wise man questions contains half an answer"

Pozostało 580 znaków

2008-05-05 22:16
0

Zastanawiam się na jaki ch*** się tłuczecie skoro odpowiedź padła, rozwiązanie jest... Jak skakać to na prv, gadu, mail!


<span style="color: blue">"Kolarstwo to jedna z najtrudniejszych dyscyplin sportu. Nawet najgorszy kolarz jest wciąż wybitnym sportowcem."
s.p. Marco Pantani
</span>

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0