Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-10-2005, 10:34   #1 (permalink)
Neuer User
 
Registriert seit: Oct 2005
Beiträge: 4
filter

ich habe versucht, eine oszillierende chemische reaktion nachzubauen, mit setPixel und 2d arrays geht das aber nur recht langsam und auf eine kleine matrix beschränkt. (ca. 30x30px).
meine frage - wie kann ich diesen algorithmus mit filtern anwenden statt mit arrayberechnung und setPixel?

merci




*.fla anbei.
Angehängte Grafiken
Dateityp: jpg belusov1.jpg (4,5 KB, 89x aufgerufen)
Angehängte Dateien
Dateityp: zip setpixtry7.zip (6,6 KB, 22x aufgerufen)

Geändert von renaissance (27-10-2005 um 10:40 Uhr)
renaissance ist offline   Mit Zitat antworten
Alt 27-10-2005, 12:50   #2 (permalink)
x39
 
Benutzerbild von georgem
 
Registriert seit: Oct 2004
Ort: St.Gallen, Schweiz
Beiträge: 1.261
visuell sieht das einbisschen aus wie ein PerlinNoise ( mit vielen Oktaven und Turbulence), und dann mit einem Threshold filter gesiebt.

Aber keine Ahnung was dein Algorithmus genau macht, kanst du das kurz erläutern?
__________________
The Sleeper Must Awaken

www.margaris.de | www.exosolar.net
georgem ist offline   Mit Zitat antworten
Alt 27-10-2005, 13:34   #3 (permalink)
Neuer User
 
Registriert seit: Oct 2005
Beiträge: 4
algor

ja, das anfangsstadium ist quasi perlin noise.

..es geht um eine oszillierende reaktion (belusov-zhabotinski nach den entdeckern), bei der aus einem 'chaotischen' anfangszustand eine art oszillierende stabilität entsteht. (spiralen) ..es braucht einige loops bis das im beispiel deutlich wird.

im anfangstadium des prozesses hat jeder punkt einen zufallswert
zwischen 1 und n.

n farbwerte werden aus einer palette entnommen und dem punkt im anfangszustand (nach wert) zugeordnet.
jeder punkt kann also 1 - n verschiedene farbwerte annehmen.

für die transformation 'onEnterFrame' gilt:

punkte mit wert 1 sind 'gesund'
punkte mit wert n sind 'krank'
punkte mit werten zwischen 1 und n sind 'infiziert'

*punkte mit wert 1 ändern ihren wert nach formel:

Math.floor(at/k1) + Math.floor(bt/k2) + 1;

wobei k1=2;k2=3 konstante sind und
at = anzahl der umgebenden punkte die 'infiziert' sind
bt = anzahl der umgebenden punkte die 'krank' sind

*punkte mit wert n ändern ihren wert zu 1 - 'von krank zu gesund'

*punkte mit werten zwischen 1 und n ändern ihren wert nach formel:

Math.floor(S/(at + bt-1)) + g;

wobei g die 'verbreitungs'konstante ist, at/bt wie vorher und
S = summe aller werte der 3x3 matrix d.h. punkt und alle umliegenden punkte in 2D.

führen die zwei letzten regeln zu einem wert >n, wird der neue wert auf n gesetzt.


..der convolution filter dient hier nur zum blurren.

Geändert von renaissance (27-10-2005 um 14:41 Uhr)
renaissance ist offline   Mit Zitat antworten
Alt 27-10-2005, 15:00   #4 (permalink)
x39
 
Benutzerbild von georgem
 
Registriert seit: Oct 2004
Ort: St.Gallen, Schweiz
Beiträge: 1.261
hm ja, ich seh schon, das tönt alles sehr nach CELLULAR AUTOMATA.

somit denke ich, dass grossräumige Filterberechnungen mit Flash 8 kaum was bringen, weil der belusov-zhabotinski ist schon ein sehr spezifischer Algorithmus.

Aber ich könnte auch total falsch liegen...
__________________
The Sleeper Must Awaken

www.margaris.de | www.exosolar.net
georgem ist offline   Mit Zitat antworten
Alt 27-10-2005, 15:20   #5 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
klaubs auch net aber die filter function ist ja beschrieben

kuk vileicht kanst was damit anfangen

ColorMatrixFilter
redResult = a[0] * srcR + a[1] * srcG + a[2] * srcB + a[3] * srcA + a[4]
greenResult = a[5] * srcR + a[6] * srcG + a[7] * srcB + a[8] * srcA + a[9]
blueResult = a[10] * srcR + a[11] * srcG + a[12] * srcB + a[13] * srcA + a[14]
alphaResult = a[15] * srcR + a[16] * srcG + a[17] * srcB + a[18] * srcA + a[19]

ConvolutionFilter
dst (x, y) = ((src (x-1, y-1) * a0 + src(x, y-1) * a1....
src(x, y+1) * a7 + src (x+1,y+1) * a8) / divisor) + bias
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Alt 28-10-2005, 19:14   #6 (permalink)
Neuer User
 
Registriert seit: Oct 2005
Beiträge: 4
cellular

ich fürchte, das versteh ich nicht ganz.
kannst du das erläutern? wofür stehen die variablen?
ich nutze flash nur ganz selten und hab das filter prinzip wohl noch nicht so verstanden.
wie kann ich mit dem filter die werte der punkte um einen zentralen punkt checken und den neuen farbwert setzen?
renaissance ist offline   Mit Zitat antworten
Alt 28-10-2005, 20:32   #7 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
ColorMatrixFilter

du gibst ihm ein array mit 20 werten 5 fur jeden color (R G B A)

jezt hast ein punkt mit der farbe 0x AA BB CC DD

damit es nicht zu einfach ist ist der array RGBA und der color ARGB in flash

also wir haben den punkt

jetzt

AA ist der alpha wert

der neu wert ist

Array[15] * BB + Array[16] * CC + Array[17] * DD + Array[18] * AA + Array[19]
ist das grosser als 255 wird es auf 255 gesetzt

das dan fur alle 3 farben + alpha

und du hast den neuen color

kanst keine nachbar punkte beruksichtigen !


das konte eventuel mit dem ConvolutionFilter gehen

hab aber keine ahnung wie der functioniert !

da kanst belibig grosse Matrixen angeben

z.b 3x3

[1][2][1]
[2][4][2]
[1][2][1]

das ist der "Basic Smooth: 3x3" filter solte von grafik programen bekant sein

aber wie gesag wie das genau functioniert keine ahnung
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Alt 28-10-2005, 21:29   #8 (permalink)
Neuer User
 
Registriert seit: Oct 2005
Beiträge: 4
vielen dank - ich probier mal noch bisschen rum. aber - in dieser (belusov) transformation beruht die änderung der punktfarbe auf dem aktuellen zustand der nachbarpunkte. d.h. es muss für alle punkte im bitmaparray erst der neue wert gefunden werden bevor der (ausgangsbild) array vom neuen überschrieben werden kann. bei änderung von nur einzelnen werten (fortlaufend) würde es nicht funktionieren. das ist wohl also mit filter - so wie ich es bisher verstehe nicht zu machen.
renaissance ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele