amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Kreis Zeichnen ohne graphics.library [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- 2 3 4 5 [ - Beitrag schreiben - ]

23.03.2008, 15:33 Uhr

MaikG
Posts: 5172
Nutzer
In der cybergraphics gibt es ja keine Circle Function.
Nur ebend Punkt oder Viereck.
Kann man ein Kreis auch irgendwie mit Sinus berechnen und
per WritePixel darstellen?

[ - Antworten - Zitieren - Direktlink - ]

23.03.2008, 17:24 Uhr

Ralf27
Posts: 2779
Nutzer
code:
pi=3.14
x=100
y=100
r=10

FOR w=-pi TO pi STEP .1
 x1=x+SIN(w)*r
 y1=y+COS(w)*r
 PSET(x1,y1)
NEXT


So könnte man ein Kreis mit PSET zeichen. Dabei kann man noch einiges verbessern(hab ich jetzt eben mal auf die schnelle geschrieben). Jetzt einfach PSET durch WritePixel ersetzen und fertig. Allerdings... es gibt ein Befehl in der graphics.library ( DrawEllipse() ). Es wäre wohl besser wenn man diesen benutzen würde:

code:
rem DrawEllipse( rp, cx, cy, a, b )
 DrawEllipse WINDOW(8),100,100,10,10


Wieso eigentlich ohne graphics.lib?
--
http://www.alternativercomputerclub.de.vu

[ Dieser Beitrag wurde von Ralf27 am 23.03.2008 um 17:30 Uhr geändert. ]

[ Dieser Beitrag wurde von Ralf27 am 23.03.2008 um 17:31 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

23.03.2008, 17:46 Uhr

MaikG
Posts: 5172
Nutzer
>Jetzt einfach PSET durch WritePixel ersetzen und fertig.


Danke! Muss man eigentlich nur noch den Step Wert auf die größe anpassen.




>Wieso eigentlich ohne graphics.lib?

Mit obtainbestpen bekommt man wohl nur 8 Bit auch wenn man einen
24 Bit Screen hat. Also müsste ich höchstens irgendwie die
"Palette" vom 24 Bit CGX Screen rausbekommen und hoffen das
DrawEllipse 24 Bit verwenden kann. Aber so ist es einfacher...

[ - Antworten - Zitieren - Direktlink - ]

24.03.2008, 10:57 Uhr

Blackbird
Posts: 634
Nutzer
Zitat:
Original von MaikG:
>Jetzt einfach PSET durch WritePixel ersetzen und fertig.


Danke! Muss man eigentlich nur noch den Step Wert auf die größe anpassen.



Du kannst auch aus der cybergraphics.lib WriteRGBPixel nehmen
Das verwendet keinen Pens sondern RGB-werte in 8bit (incl alpha)...

also: AA,RR,GG,BB

Zitat:
Original von MaikG:

>Wieso eigentlich ohne graphics.lib?

Mit obtainbestpen bekommt man wohl nur 8 Bit auch wenn man einen
24 Bit Screen hat. Also müsste ich höchstens irgendwie die
"Palette" vom 24 Bit CGX Screen rausbekommen und hoffen das
DrawEllipse 24 Bit verwenden kann. Aber so ist es einfacher...


Schon der Name sagt eigentlich aus das OptainBestPen 8bit ist, genauso wie DrawEllipse/RectFill und dergleichen

Für DrawEllipse mußt du schon davor mit SetAPen deinen Pen für den RastPort setzen. Den kannst du mit OptainBestPen ermitteln wenn du möchtest. OptainBestPen sucht dir die "näheste" Penfarbe aus...

und btw: 16/24/32bit Screens haben keine Palette....
--
regards
Blackbird

Have a look at:
http://www.blackbird-net.de

Skins for PlayCD OS3.9
BlackShoot, Zombies Apocalypse, GalagaWars, VcdImager-Gui,PerfectPaint

[ - Antworten - Zitieren - Direktlink - ]

24.03.2008, 15:10 Uhr

kev
Posts: 56
Nutzer
Um es kurz zu fassen:

Allozier' dir einen Stift, denn auch HiColor/TrueColor Screens haben eine Palette, setze deine gewünschte Zeichenfarbe (SetRGB32 oä.) und mal dann mit dem Stift per DrawEllipse etc. Da kannst Du alle 16.8mil. Farben nutzen.

[ - Antworten - Zitieren - Direktlink - ]

24.03.2008, 17:44 Uhr

MaikG
Posts: 5172
Nutzer
>Du kannst auch aus der cybergraphics.lib WriteRGBPixel nehmen
>Das verwendet keinen Pens sondern RGB-werte in 8bit (incl alpha)...

Will ich ja...

>Für DrawEllipse mußt du schon davor mit SetAPen deinen Pen für den
>RastPort setzen.

Wollte ja mal mir ReadPixel, SetAPen da ran. Aber die sind
wohl auch nur 8 Bit.


>Allozier' dir einen Stift, denn auch HiColor/TrueColor Screens
>haben eine Palette, setze deine gewünschte Zeichenfarbe (SetRGB32
>oä.) und mal dann mit dem Stift per DrawEllipse etc.
>Da kannst Du alle 16.8mil. Farben nutzen.

Das klappt nicht. Wenn ich z.B. Rot von 0,0,0-255,0,0 hole
bekomme ich etwa 8 Verschiede Farben, statt 255.

[ - Antworten - Zitieren - Direktlink - ]

24.03.2008, 18:03 Uhr

kev
Posts: 56
Nutzer
@MaikG:

Ich weiß nicht, was Du damit meinst. Mit genannter Methode kannst Du auf jedenfall alle 16.8mil Farben nutzen.

[ - Antworten - Zitieren - Direktlink - ]

24.03.2008, 18:52 Uhr

Blackbird
Posts: 634
Nutzer
@MaikG:


:dance3: :dance3:


colorpen.l=OptainBestPen (colormap,R,G,B,Taglist)

SetAPen (RastPort,colorpen)

und dann mit DrawEllipse zeichnen...

Wobei die RGB-werte von 0-255 für jeden einzelnen Wert gehen...


anders wäre es bei WriteRGBPixel, da müßtest du die RGB-werte in

AA,RR,GG,BB angeben...

$00ffffff wäre weis
oder
$00000000 wäre schwarz usw..


>Das klappt nicht. Wenn ich z.B. Rot von 0,0,0-255,0,0 hole

????

colorpen.l=OptainBestPen(colormap,255,0,0,Taglist)

würde dir einen Pen geben der rot wäre...


oder was meinst du mit holen ?

--
regards
Blackbird

Have a look at:
http://www.blackbird-net.de

Skins for PlayCD OS3.9
BlackShoot, Zombies Apocalypse, GalagaWars, VcdImager-Gui,PerfectPaint

[ - Antworten - Zitieren - Direktlink - ]

24.03.2008, 19:07 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Blackbird:
colorpen.l=OptainBestPen(colormap,255,0,0,Taglist)

würde dir einen Pen geben der rot wäre...

Oder irgendetwas, dass ungefähr rot ist, je nachdem, wie viele Pens noch frei sind. Man kann natürlich die Genauigkeit des Stiftes erhöhen, bzw. einen exklusiven Pen anfordern (für die SetRGB... Methode die einzige Möglichkeit) und damit erreichen, dass Obtain(Best)Pen fehlschlägt, wenn kein ausreichend roter, bzw. kein freier Stift zur Verfügung steht.

Am grundsätzlichen Problem ändert das nichts: man kann mit dem AOS3.x API keinen Kreis in einer frei wählbaren Farbe zeichnen. Dies funktioniert nur über workarounds via Palette-basierte Funktionen, die fehlschlagen, sobald genügend andere Programme a) Pens reservieren, weil sie nix von truecolor wissen, oder b) denselben Trick versuchen.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

24.03.2008, 19:11 Uhr

Blackbird
Posts: 634
Nutzer
@Holger:

stimmt,
sobald kein roter Pen mehr frei ist, schlägt das natürlich fehl....


Aber im Prinzip wissen wir noch nicht einmal ob MaikG einen eigenen Screen (mit eigener Palette) verwendet, oder die WB nutzt/nutzen will...
--
regards
Blackbird

Have a look at:
http://www.blackbird-net.de

Skins for PlayCD OS3.9
BlackShoot, Zombies Apocalypse, GalagaWars, VcdImager-Gui,PerfectPaint

[ - Antworten - Zitieren - Direktlink - ]

24.03.2008, 20:31 Uhr

thomas
Posts: 7716
Nutzer
@Blackbird:

Zitat:
colorpen.l=OptainBestPen(colormap,255,0,0,Taglist)

würde dir einen Pen geben der rot wäre...


Falsch. Das gibt dir ein tiefes Schwarz.

Zitat:
Wobei die RGB-werte von 0-255 für jeden einzelnen Wert gehen...

Falsch. Die Werte gehen von 0 bis 4294967295. Rot wäre demnach 4294967295,0,0 (oder 0xffffffff,0,0);

Zitat:
sobald kein roter Pen mehr frei ist, schlägt das natürlich fehl....

Ich weiß nicht, wie du das meinst, aber es hört sich auch falsch an. Wenn du das möchtest, gibt ObtainBestPen dir immer etwas zurück, selbst wenn es nicht mal rötlich ist (OBP_FailIfBad,FALSE). Und ObtainPen kümmert sich nicht um die Farben, da gibt es keinen "roten Pen".

Zitat:
Am grundsätzlichen Problem ändert das nichts: man kann mit dem AOS3.x API keinen Kreis in einer frei wählbaren Farbe zeichnen. Dies funktioniert nur über workarounds via Palette-basierte Funktionen, die fehlschlagen, sobald genügend andere Programme a) Pens reservieren, weil sie nix von truecolor wissen, oder b) denselben Trick versuchen.

Das ist zwar richtig, da kann man aber mit umgehen. Wenn ein Benutzer so viele Programme mit eigenen Pens installiert hat (oder FullPalette o.ä. benutzt), dann ist er selbst schuld.

Normalerweise ist immmer noch ein Pen frei und mehr braucht man ja gar nicht.

Außerdem sehe ich die Relevanz nicht. Das Problem der blockierten Pens tritt nur auf, wenn man auf einem gemeinsam genutzen Screen arbeitet. Ich bin mir aber ziemlich Sicher, daß Maik immer noch an seinem Druckthema arbeitet und sich somit auf einem eigenen Screen oder gar einer Off-Screen-Bitmap befindet.

Wie man mit nur einem Stift den kompletten RGB-Raum mit graphics.library-Funktionen benutzt, dafür habe ich hier ein Beispiel: http://thomas-rapp.homepage.t-online.de/download/truecolors.lha

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

25.03.2008, 10:18 Uhr

MaikG
Posts: 5172
Nutzer
Na, da hab ich mich wieder schlecht ausgedrückt.
Ich brauche folgende farben:

1,0,0
2,0,0
3,0,0
4,0,0
5,0,0
6,0,0
7,0,0
8,0,0
9,0,0
10,0,0
.
.
.
.
.
255,0,0


Und ich bin auf der Workbench die 16 Bit hat.

[ - Antworten - Zitieren - Direktlink - ]

25.03.2008, 10:23 Uhr

kev
Posts: 56
Nutzer
@MaikG:

Ja und wo ist jetzt das Problem??? thomas hat doch sogar Quellcode verlinkt, der genau zeigt, was Du machen musst.

[ - Antworten - Zitieren - Direktlink - ]

25.03.2008, 13:06 Uhr

Ralf27
Posts: 2779
Nutzer
@MaikG:

Hm, du hast mir damals selbst ein Beispielcode für MaxonBasic gegeben die das Problem das du hast löst, deswegen bin ich gerade etwas ratlos bei dem Penproblem das du gerade hast ?(

Allerdings muß man erst wissen was du genau vor hast, denn es gibt einige Möglichkeiten ins Ziel.

Z.b. wenn du nur 8Bit brauchst und willst in der Bitmap machen was du willst, dann leg doch einfach eine 8bit-bitmap an, zeichne in der so rum wie du willst und dann kopierst du die mit den cybergraphics-befehlen in die 16/24bit-Bitmap, wohin auch immer. Natürlich sollte man dann noch vor dem Blit eine Farbtabelle anlegen, damit cybergraphics auch die richtigen Farben nimmt. :)

So ähnlich geh ich auch in BMP-Reader vor.
Aber ich würde dir schon raten mit der Bitmap gleich einen Rastport zu generieren, das ganze zu koppeln und schon gehen die meisten graphics.lib-befehle. Allerdings nur die die keine TmpRas-Struktur brauchen, was ja z.b. die Füllen-Befehle brauchen. Aber denn kann man ja auch noch ...

Bzw. müßte man schon wissen was du da genau vor hast, es gibt viele verschiedene Lösungsmöglichkeiten von dennen einige besser sind, andere schlechter. Es kommt auf das Problem an, das man hat.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

25.03.2008, 13:51 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Den Algo zum Kreismalen kann man aber auch wesentlich effizienter gestalten:
Dazu muss man den Kreis in 4 Sektoren einteilen, wo sich der nächste Pixel immer um 1 von dem vorherigen in einer koordinatenachse unterschiedet, z.B. von 45-135°. Dort geht man dann nicht .1 Grad weiter, sondern immer um einen Pixel nach unten und berechnet die X Postion neu. Die anderen Sektoren kann man durch Spiegelung sofort mitzeichnen, ohne neu Sin/Cos zu rechnen.

Für OS4/MOS&/AROS/AfAOS kann man aber auch die graphics.lib benutzen, und vorher

SetRPAttrsA( RastPort,RPTAG_PenMode,False,RPTAG_FgColor,RGBColor,RPTAG_APenColor,RGBColor)

machen.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

25.03.2008, 18:04 Uhr

MaikG
Posts: 5172
Nutzer
>Wie man mit nur einem Stift den kompletten RGB-Raum mit
>graphics.library-Funktionen benutzt, dafür habe ich hier ein
>Beispiel: http://thomas-rapp.homepage.t-online.de/download/truecolors.lha


Ah, also Allociere ich einen PEN und verändere dessen Farbe?
Da es ein 16 Bit/24 Bit Screen ist, gibt es eigentlich keine
Palette von daher kann auch kein anderes Programm mein bereits
gezeichnetes Bild verändern, richtig?

Funktionier aber nicht für einen rastport der nicht wirklich
sichtbar ist, weil der keine Colormap hat?

Weil das zu groß ist Scaliere ich ja nur und dann gehts per
Blit auf die WB.


>Ja und wo ist jetzt das Problem??? thomas hat doch sogar Quellcode
>verlinkt, der genau zeigt, was Du machen musst.

Hatte bis ebend noch keine Zeit das anzusehen.


>Hm, du hast mir damals selbst ein Beispielcode für MaxonBasic
>gegeben die das Problem das du hast löst, deswegen bin ich gerade
>etwas ratlos bei dem Penproblem das du gerade hast ?(

Ich glaub das war dann für die Datatypes(PDA_Desttype).


>Allerdings muß man erst wissen was du genau vor hast, denn es gibt
>einige Möglichkeiten ins Ziel.

Also wie man ein 24 Bit Bild auf die WB legt weiss ich ja.
Das Problem ist aber das man mit OptainPen nicht die exakte
Farbe bekommt, welche man will. Da werden wohl nur die unteren
8 Bit nach der wunschfarbe durchsucht. So bekommt man für 5 ähnliche
farben 5 gleiche geliefert.

[ - Antworten - Zitieren - Direktlink - ]

25.03.2008, 18:13 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von thomas:
Das ist zwar richtig, da kann man aber mit umgehen. Wenn ein Benutzer so viele Programme mit eigenen Pens installiert hat (oder FullPalette o.ä. benutzt), dann ist er selbst schuld.

Normalerweise ist immmer noch ein Pen frei und mehr braucht man ja gar nicht.

Was verstehst Du bitteschön unter "normalerweise"?! Dieser workaround funktioniert nur, wenn man einen Pen exklusiv reserviert, womit das absolute Maximum bei 248 Programmen liegt, die gleichzeitig diesen workaround benutzen können, da bereits 8 Pens von intuition shared reserviert werden.

Und jedes Programm, das aus anderen Gründen Pens reserviert, reduziert die maximal mögliche Anzahl. Selbst dann, wenn es die Pens brav als shared reserviert. Und "selbst schuld" ist nicht die richtige Antwort, wenn der Benutzer vollkommen systemkonforme Programme verwendet, das System aber nunmal eine grundsätzlichen Schwäche aufweist.

Es ist also schön, dass es einen workaround gibt. Das ändert nichts daran, dass es das Problem gibt. Klar, mehr als 200 Programme wird niemand gleichzeitig verwenden...und 640kB sollten auch für alle Zeit für alle Computer-relevanten Aufgaben ausreichen...und überhaupt...

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

25.03.2008, 19:14 Uhr

jochen22
Posts: 1139
[Benutzer gesperrt]
@Der_Wanderer

Zitat:
Original von Der_Wanderer:
Den Algo zum Kreismalen kann man aber auch wesentlich effizienter gestalten:
Dazu muss man den Kreis in 4 Sektoren einteilen,

....


Diesen Trick kenn ich auch.
Wollt ihn schon posten, hast Du mir ja abgenommen.
Würd mich aber wirklich interessieren woher Du ihn kennst.

Gruß Jochen

[ - Antworten - Zitieren - Direktlink - ]

25.03.2008, 22:42 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@jochen
Naja, den Kreis in 4 Sektoren einteilen, die man spiegelt, ist ja trivial.
Nicht so ganz tivial aber ist, ihn genau so aufzuteilen, dass man nur Kreisteile erhält, die sich in jeweils einer 2D-Achse in 1 Pixel Schritten bewegen. Dadurch vermeidet man 1x Cosinus/Sinus Berechnung, aber vor allem das Doppelt-Zeichnen von Pixeln, wie es der Fall wäre, wenn man den Winkel linear durchlaufen lässt.
Es gibt keine Bestimme Quelle, woher ich das weiss. Sowas denke ich mir on-the-fly aus.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

26.03.2008, 04:27 Uhr

Mad_Dog
Posts: 1944
Nutzer
Zitat:
Original von MaikG:

Ah, also Allociere ich einen PEN und verändere dessen Farbe?
Da es ein 16 Bit/24 Bit Screen ist, gibt es eigentlich keine
Palette von daher kann auch kein anderes Programm mein bereits
gezeichnetes Bild verändern, richtig?


Ich denke, für Dein Problem habe ich doch in meinem C-Kurs genau das richtige Beispiel gebracht:

http://w3.norman-interactive.com/C-Kurs_8_10.html





--
http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

26.03.2008, 08:07 Uhr

Mad_Dog
Posts: 1944
Nutzer
Zitat:
Original von Der_Wanderer:
@jochen
Naja, den Kreis in 4 Sektoren einteilen, die man spiegelt, ist ja trivial.
Nicht so ganz tivial aber ist, ihn genau so aufzuteilen, dass man nur Kreisteile erhält, die sich in jeweils einer 2D-Achse in 1 Pixel Schritten bewegen. Dadurch vermeidet man 1x Cosinus/Sinus Berechnung, aber vor allem das Doppelt-Zeichnen von Pixeln, wie es der Fall wäre, wenn man den Winkel linear durchlaufen lässt.


Dazu müsstest Du aber die Sektoren spiegeln.

Im Prinzip könnte man den Kreis auch ganz ohne Polarkoordinaten zeichnen. Wenn man in einer Schleife über x und y iteriert und bei jedem Schritt prüft, ob folgende Gleichung erfüllt ist:

(x-xm)^2 + (y-ym)^2 = r^2

Wobei xm,ym der Mittelpunkt des Kreises und r der Radius ist.
Wenn die Gleichung erfüllt ist, setzt man den Pixel, sonst nicht.

Ich befürchte allerdings, daß das von der Geschwindigkeit nicht so der Hit ist, wenn man das ausprogrammiert. ;)

--
http://www.norman-interactive.com

[ Dieser Beitrag wurde von Mad_Dog am 26.03.2008 um 08:09 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

26.03.2008, 09:52 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Mad Dog

> Dazu müsstest Du aber die Sektoren spiegeln.
Habe ich doch geschrieben. Aber das ist ja einfach, man muss nur das Vorzeichen umdrehen.

Die Quadratische Gleichung lösen wäre aber auch ok, wenn man diese Sektor Einteilung nutzt und die gleichung so umstellt:

x = Sqrt(r^2 - y^2)

und dann y durchlaufen lässt.

Man würde ein Cosinus gegen eine Wurzel eintsuchen. Cosinus ist aber soweit ich weiss deutlich schneller.


--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

26.03.2008, 10:00 Uhr

kev
Posts: 56
Nutzer
Wer mal nach Bresenham im Internet sucht, der sollte eigentlich ganz leicht fündig werden ;)

[ - Antworten - Zitieren - Direktlink - ]

26.03.2008, 10:30 Uhr

MaikG
Posts: 5172
Nutzer
>Ich denke, für Dein Problem habe ich doch in meinem C-Kurs genau das richtige Beispiel gebracht:

>http://w3.norman-interactive.com/C-Kurs_8_10.html


Neu hinzugefügt, hab ich noch gar nicht ausgedruckt.

Aber das ist ja das was ich sonst immer mache, nur erhält man
mit OptainBestPens nur Farben aus den unteren 8 Bit. Oder
sucht exact auch darüber hinaus?

[ - Antworten - Zitieren - Direktlink - ]

26.03.2008, 10:54 Uhr

Mad_Dog
Posts: 1944
Nutzer
Zitat:
Original von MaikG:
>Ich denke, für Dein Problem habe ich doch in meinem C-Kurs genau das richtige Beispiel gebracht:

>http://w3.norman-interactive.com/C-Kurs_8_10.html

Neu hinzugefügt, hab ich noch gar nicht ausgedruckt.


Das ist schon ziemlich alt...

Zitat:
Aber das ist ja das was ich sonst immer mache, nur erhält man
mit OptainBestPens nur Farben aus den unteren 8 Bit. Oder
sucht exact auch darüber hinaus?


Du darfst die Farbtiefe und die Anzahl von Stiften nicht verwechseln.
Auch wenn nur 256 Pens (Stifte) zur Verfügung stehen, kannst Du für jeden Stift 96 Bit Farbtiefe angeben - je 32 Bit für Rot, Grün und Blau.

--
http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

26.03.2008, 11:06 Uhr

Mad_Dog
Posts: 1944
Nutzer
Zitat:
Original von kev:
Wer mal nach Bresenham im Internet sucht, der sollte eigentlich ganz leicht fündig werden ;)


Sehr schön, hier haben wir es ja:

http://de.wikipedia.org/wiki/Bresenham-Algorithmus#Kreisvariante_des_Algorithmus

--
http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

26.03.2008, 11:23 Uhr

Mad_Dog
Posts: 1944
Nutzer
Wegen dem "Pen-Problem" ist mir noch eingefallen, daß ich vor langer Zeit ja mal ein passendes Beispielprogramm geschrieben habe:

http://w3.norman-interactive.com/Intui_Spectrum.lha

Das Programm errechnet aus der Wellenlänge die RGB-Komponenten mittels der Gauss-Funktion und zeichnet damit ein Farbspektrum.

Bild: http://w3.norman-interactive.com/Intui_Spectrum.png
--
http://www.norman-interactive.com

[ - Antworten - Zitieren - Direktlink - ]

26.03.2008, 13:52 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Der_Wanderer:
@jochen
Naja, den Kreis in 4 Sektoren einteilen, die man spiegelt, ist ja trivial.
[...]
Es gibt keine Bestimme Quelle, woher ich das weiss. Sowas denke ich mir on-the-fly aus.

Auf dem A500 konnte man noch zugucken, wenn die graphics.library einen (größeren) Kreis zeichnete. Weiß zwar nicht mehr, ob das in Vierteln oder Oktanten geschah, aber auf jeden Fall war es gespiegelt. Das bleibt vermutlich bei jedem Amiga-User im Unterbewusstsein haften ;)

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

26.03.2008, 18:03 Uhr

MaikG
Posts: 5172
Nutzer
>Das ist schon ziemlich alt...

Die Zeit vergeht so schnell, kann auch sein das ich es vergessen
habe zu Drucken. Ich musste ja die Bilder Speichern umwandeln,
den Text für Din A4 anpassen etc.




>Du darfst die Farbtiefe und die Anzahl von Stiften nicht verwechseln.
>Auch wenn nur 256 Pens (Stifte) zur Verfügung stehen, kannst Du für
>jeden Stift 96 Bit Farbtiefe angeben - je 32 Bit für Rot, Grün und
>Blau.


Ja, aber mit Precision GUI und Image bekomme ich wenn ich z.B.

2,0,0
6,0,0
10,0,0
14,0,0
18,0,0

angebe z.B. 5 mal 10,0,0
Deshalb ging ich davon aus das nur 8 Bit des Screens statt 16 Bit
des Screens durchsucht werden. Ich muss mal precision exakt testen.

Wobei Problem bleibt nach wie vor das ich weder einen Viewport
noch eine Colormap habe weil es nur ein AllocRastport mit AllocBitmap
ist. Ohne Screen und Window.

[ - Antworten - Zitieren - Direktlink - ]

26.03.2008, 18:26 Uhr

Mad_Dog
Posts: 1944
Nutzer
Zitat:
Original von MaikG:

Ja, aber mit Precision GUI und Image bekomme ich wenn ich z.B.

2,0,0
6,0,0
10,0,0
14,0,0
18,0,0

angebe z.B. 5 mal 10,0,0


Was soll denn 10,0,0 sein? Bedenke: die RGB-Werte sind 32 Bit Werte, also geht der Wertebereich von 0 bis 4294967296. Damit ist 10,0,0 immernoch schwarz mit einem minimalen Rotstich.

Wenn Du ein sattes Rot haben willst, dann mußt Du das schon so machen:
c code:
red_pen = ObtainBestPen(Fenster->WScreen->ViewPort.ColorMap,
                              0xFFFFFFFF,0x00000000,0x00000000,
                              OBP_Precision,PRECISION_EXACT,
                              TAG_DONE);


Zitat:
Wobei Problem bleibt nach wie vor das ich weder einen Viewport
noch eine Colormap habe weil es nur ein AllocRastport mit AllocBitmap
ist. Ohne Screen und Window.


Vielleicht ist für Dein Problem die Verwendung von ObtainBestPen nicht der richtige Ansatz? Beschreib doch mal, was Du vorhast und geb uns einen Einblick in das, was Du schon programmiert hast.

In der Zwischenzeit kannst Du Dir ja noch diese Lektion meines C-Kurses zum Thema "Colortables" anschauen:

http://w3.norman-interactive.com/C-Kurs_8_8.html



--
http://www.norman-interactive.com

[ Dieser Beitrag wurde von Mad_Dog am 26.03.2008 um 18:26 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]


-1- 2 3 4 5 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Kreis Zeichnen ohne graphics.library [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.