Rysowanie linii falistej.

0

Jak narysować taką falistą linię?

coś takiego: ~~~~~

ale bez odstępów i symetrycznie - góra dół tak samo.
Aha, to się nazywa chyba sinusoidą fachowo!

Może niekoniecznie sinusoida, ale coś podobnego.

Myślałem rysować to kawałkami za pomocą funkcji Arc,
no ale może jest coś lepszego, bo trochę dużo byłoby potrzeba łuków dla długich linii.

0

Aha, to się nazywa chyba sinusoidą fachowo!

No, to fachową nazwę znasz. Więc w czym problem? Zakładam, że wiesz, w jaki sposób działa funkcja sin.


no ale może jest coś lepszego, bo trochę dużo byłoby potrzeba łuków dla długich linii.

Pętla maybe?

0

No a jaki problem zrobić to w oparciu o sinus?

0

Obliczaj sobie kolejne punkty funkcji f(x) = sin(x) i rysuj linie od poprzedniego punktu do następnego. Jak chcesz "powiększyć" sinusa, bo w skali 1:1 to go raczej nie wyświetlisz, wtedy możesz liczyć f(x) = sin(x/10)*10, albo jeszcze bardziej: f(x) = sin(x/100)*100

0

Takie coś odpada.
Chodzi mi o szybkie rysowanie i skalowalne, co znaczy gdy drukuję na drukarce 2000 DPI,
albo skopiuję, np. do wmf i powiększę 100 razy ma być to ciągłe tylko linie grubsze, a nie jakieś luźno rozsypane kropeczki, czy kółeczka.

Dlatego mówiłem o rysowaniu za pomocą Arc, czyli kawałkami elips;
jeden okres fali byłby tu złożony z dwóch Arc: jeden kawałek wypukły: /, i drugi klęsły /.

Można też użyć PolyBezier, ale to chyba gorzej wyjdzie, bo trzeba będzie minimum z 4 sztuki na okres fali.

Nie ma jakiegoś fonta ze znakiem fali - jeden pełny okres?
To byłoby chyba szybsze i lepsze, bo rysowałbym tylko string o odpowiedniej długości,
a czcionki można sobie łatwo skalować a nawet obracać.

Byłoby wtedy tak: ciach TextOut(x,y, '~~~~~~~~~') i gotowe.

usunięcie cytowania całego poprzedniego posta - fp

0

Zaraz zaraz, z tego co mi się wydaje, to rysujesz to na canvasie. Canvas jest rastrowy, wmf jest wektorowy. Więc jak chcesz to wyesportować? Poza tym kto mówi o jakichś kropeczkach czy kółeczkach? przelatujesz sinusa co odpowiedni krok (dobrany eksperymentalnie) i zczytujesz wartości. teraz pomiedzy tak otrzymanymi punktami rysujesz linie i masz falę. Jeśli zależy Ci na grafice wektorowej, przykładowo wmf, to zapoznaj sie ze specyfikacją tego wmfa: http://msdn.microsoft.com/en-us/library/cc215212.aspx tylko weź pod uwagę, że nie wyksportujesz sobie canvasa do niego.

Czcionka... po pierwsze ma ostępy między znakami - będziesz miał przerywaną tą sinusoidę, po drugie, nie jest płynnie skalowalna.

Rysowanie za pomocą Arc albo kawałków elips.. na canvasie i tak będzie przekształcone na "luźno rozsypane kropeczki i kółeczka". Myslisz, że te tajemnicze metody używają technik z CSI: Zoom And Digital Enhance?

0
misiakufal napisał(a):

Zaraz zaraz, z tego co mi się wydaje, to rysujesz to na canvasie. Canvas jest rastrowy, wmf jest wektorowy. Więc jak chcesz to wyesportować?

Kto mówił o jakichś kanwasach?
To ma być rysowane uniwersalnie, znaczy na dowolnym urządzeniu, czyli za pomocą funkcji z gdi, które są niezależne od sprzętu.

Tam jest tylko ten device context: hdc, który może dotyczyć ekranu, bitmapy, czy metafile - zwykły lub rozszerzony, albo dowolnej drukarki, w tym postscriptowej, które rysują takie rzeczy właśnie za pomocą bezierów, arców i pathów.

misiakufal napisał(a):

przelatujesz sinusa co odpowiedni krok (dobrany eksperymentalnie) i zczytujesz wartości. teraz pomiedzy tak otrzymanymi punktami rysujesz linie i masz falę. Jeśli zależy Ci na grafice wektorowej, przykładowo wmf, to zapoznaj sie ze specyfikacją tego wmfa: http://msdn.microsoft.com/en-us/library/cc215212.aspx tylko weź pod uwagę, że nie wyksportujesz sobie canvasa do niego.

Byłoby to wysoce nieefektywne.
Podobnie możesz sobie rysować litery za pomocą łamanych - wiesz ile wtedy musiałbyś obliczać tych punktów żeby to było ciągłe dla dużych rozdzielczości?

misiakufal napisał(a):

Czcionka... po pierwsze ma ostępy między znakami - będziesz miał przerywaną tą sinusoidę, po drugie, nie jest płynnie skalowalna.

Czcionka dla dużych rozdzielczości jest już praktycznie płynnie skalowana, np. 8 ppt. na 1000DPI to jakieś 100 pikseli, więc może sobie skalować spokojnie co 1%.
A przerywane nie będzie, bo rysujesz w odstępach równych szerokości glyph, a nie box.

misiakufal napisał(a):

Rysowanie za pomocą Arc albo kawałków elips.. na canvasie i tak będzie przekształcone na "luźno rozsypane kropeczki i kółeczka". Myslisz, że te tajemnicze metody używają technik z CSI: Zoom And Digital Enhance?

Arc jest dobry, ale dość trudno obliczyć parametry tych elips, które tam figurują w argumentach.
Próbowałem to obliczać i okazało się, że pozostaje tu swoboda, znaczy jest pełno różnych elips, którymi można narysować falę o zadanej wysokości i okresie.
Zatem można wprowadzić dodatkowy współczynniki - zaokrąglenia tej fali.

W przypadku skrajnym byłaby to łamana: /////, a potem zwiększając zaokrąglenie przechodziłoby
to płynnie w sinusoidę, i jeszcze bardziej, aż w takie pozawijane kółeczka.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.