🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
6 messages
6 total messages Started by Radoslaw Jocz Wed, 15 May 2013 17:03
circle midpoint in Java ? + windowing
#153814
Author: Radoslaw Jocz
Date: Wed, 15 May 2013 17:03
14 lines
1987 bytes
Witam ostatnio stwierdzilem ze w Javie SDK oraz Androidzie drawCircle jest 
dosc kiepsko zaimplementowane, tzn przy duzych okregach jest slaba dokladnosc. 
Przy malych okregach wszystko jest w porzadku.
Zalezy mi na okienkowaniu i na szybkiej metodzie rysowania fragmentow okregu.

Przy malych okregach zamierzam rysowac standardowo uzywajac Graphics.drawOval
oraz Canvas.drawCircle bez implementowania okienkowania, 
dla duzych okregow chce napisac okienkowanie i rysowanie tak zeby bylo dokladnie i w miare szybko, jednak szybkosc jest drugorzedna. 

Mysle ze to beda przypadki gdy sa widoczne tylko 1 lub 2 oktety okregu.
Sadze ze bedzie trzeba rysowac wykorzystujac drawLine
w Androidzie byc moze warto uzyc drawPath lub drawLines aby zyskac na wydajnosci.

Jakies sugestje ?
Re: circle midpoint in Java ? + windowing
#153815
Author: Jacek Jackowiak
Date: Wed, 15 May 2013 20:28
1 lines
1369 bytes
A może wystarczy po prostu włączyć antyaliasing?
Re: circle midpoint in Java ? + windowing
#153816
Author: Radoslaw Jocz
Date: Wed, 15 May 2013 20:41
6 lines
1821 bytes
On Wednesday, 15 May 2013 21:28:55 UTC+1, Jacek Jackowiak  wrote:
> A może wystarczy po prostu włączyć antyaliasing?

Antyaliasing wygladza tylko krawedz, niweluje pixelizacje. Jest to istotne przy malej rozdzielczosci.

Moj problem polega na tym ze okrag o duzym promieniu jest rysowany z kilku pixelowym bledem lub wiekszym, tak jakby promien nie byl precyzyjnie obliczony na calym obwodzie. Ponadto dochodza jeszcze do tego przepelnienia int-ow.
Re: circle midpoint in Java ? + windowing
#153817
Author: TrzyLinie
Date: Fri, 17 May 2013 10:45
16 lines
1885 bytes
W dniu 2013-05-15 22:41, Radoslaw Jocz napisał(a):
> On Wednesday, 15 May 2013 21:28:55 UTC+1, Jacek Jackowiak  wrote:
>> A może wystarczy po prostu włączyć antyaliasing?
>
> Antyaliasing wygladza tylko krawedz, niweluje pixelizacje.
> Jest to istotne przy malej rozdzielczosci.
>
> Moj problem polega na tym ze okrag o duzym promieniu jest rysowany
> z kilku pixelowym bledem lub wiekszym, tak jakby promien nie byl
> precyzyjnie obliczony na calym obwodzie. Ponadto dochodza jeszcze
> do tego przepelnienia int-ow.

Własne rysowanie? Algorytm Bresenhama?

-- 
TrzyLinie
Re: circle midpoint in Java ? + windowing
#153818
Author: Tomek P.
Date: Fri, 17 May 2013 16:42
42 lines
2698 bytes
Radoslaw Jocz wrote:

> Witam ostatnio stwierdzilem ze w Javie SDK oraz Androidzie drawCircle jest
> dosc kiepsko zaimplementowane, tzn przy duzych okregach jest slaba
> dokladnosc. Przy malych okregach wszystko jest w porzadku.
> Zalezy mi na okienkowaniu i na szybkiej metodzie rysowania fragmentow
> okregu.
> 
> Przy malych okregach zamierzam rysowac standardowo uzywajac
> Graphics.drawOval oraz Canvas.drawCircle bez implementowania okienkowania,
> dla duzych okregow chce napisac okienkowanie i rysowanie tak zeby bylo
> dokladnie i w miare szybko, jednak szybkosc jest drugorzedna.
> 
> Mysle ze to beda przypadki gdy sa widoczne tylko 1 lub 2 oktety okregu.
> Sadze ze bedzie trzeba rysowac wykorzystujac drawLine
> w Androidzie byc moze warto uzyc drawPath lub drawLines aby zyskac na
> wydajnosci.
> 
> Jakies sugestje ?

Nie wiem jak w Androidzie, ale w Java SE rysuję elipsę przechodzącą przez 4 
punkty takim algorytmem:

1. Obliczam dziedzinę największej widocznej w okienku ćwiartki elipsy.
2. Dla tej dziedziny obliczam punkty Y. Mam wówczas dwie tablice int, jedną 
z X-ami, drugą z Y-ami.
3. Następnie Graphics.drawPolyline. Do wyrysowania pozostałych widocznych 
ćwiartek wykorzystuję te same punkty + transformacje.

Jestem bardzo zadowolony z rezultatu: 
http://www.youtube.com/watch?v=yTVgXuXrYVo

Problemem mogą być obliczenia, m. in. trzeba będzie obliczyć punkty 
przecięcia okręgu z granicami okna, aby wyznaczyć dziedzinę, w tym wziąć pod 
uwagę różne położenia okręgu względem okna...


Pozdrawiam
Tomek
-- 
http://tomaszpretki.pl
http://anothercharts.net
Re: circle midpoint in Java ? + windowing
#153819
Author: Radoslaw Jocz
Date: Sun, 30 Jun 2013 15:47
12 lines
2178 bytes
Zrobilem szybkie okienkowanie i zaimplementowalem pod Java SE midpointa, 
rysowanie punkt po punkcie za pomoca Graphics -> fillRect(int x, int y, int width, int height), i mimo to ze jest punkt po punkcie to dziala szybko. 

W Androidzie: Canvas -> drawPoint(float x, float y, Paint paint) 
a pozniej zoptymalizowalem na 
Canvas -> drawPoints(float[] pts, int offset, int count, Paint paint) 
uzywajac 100 elementowej tablicy float jako pole klasy 
(wiec jest zawsze dostepna w pamieci). 
Na razie nie widze czy jest to szybsze i o ile ale sadze ze powinno byc. 

Nie wiem dlaczego w Androidzie do wspolrzednych x, y nie uzywaja zmiennych typu integer czy long tylko float ale i tak szybko to dziala.
 Myslalem ze beda wieksze problemy. 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads