An die Chemiker....Und Programmierer
-
@Spieleprogrammier: Es ist echt kein Flame, soll eher flames von dir fernhalten. Poste nicht zu Themen bei denen du dir nicht sicher bist das du sie komplett verstanden hast. Und wenn du trotzdem helfen willst, dann schreib in Pseudo-Code (falls du diese Programmierkenntnisse noch nicht hast) oder schreib einfach dahinter das du keine Ahnung hast, aber das das deiner Meinung nach der beste Weg wäre.
Und noch ne kleine Frage, hast du schon Chemie?Ok, kleiner abstecher für dich, prolog will Reaktionen simulieren.
Das heisst er prellt ne bestimmte stoffmenge X, rein eine Bestimmte Menge Y und noch n andere Mengen.
Nehmen wir an er mischt, K(Kalium), H(Wasserstoff),O(Sauerstoff) und Cl(Clor)..
Dann muss das Programm schonmal wissen das Gase immer Bi-Atomar vorkommen.
Also:
K+H2+O2+Cl2
Jetzt überprüft das programm die verschiedenen Stats der Atome zu ermitteln!
Fangen wir mit Clor an. Wie du vielleicht weisst, hat Clor 7 Valenzelektronen und will aber 8 ve.
Also versucht es sich welche zu holen.
Es gibt also die Produkte HCl, KCl und vielleicht sogar O6CL (glaub nicht das das Molekül existiert. Aber vielleicht ja...)
Ok, jetzt sagen wir ist das komplette Cl aufgebraucht. Aber noch etwas O2,H2,und K ist da..
O2 reagiert mit H2 zu Wasser (H2O) oder zu Wasserperoxid(H2O2) und mit Kalium zu DiKalium-oxid (K2O) und vielleicht auch hier zu DiKaliumDiOxid(K2O2)
Das heisst eine mögliche Gleichung wäre:
K+H2+O2+Cl2 reagiert zu -> HCl + KCl + O6Cl + H2O2 + H2O + K2O + K2O2Und das muss man dem Programm rechnerisch beibringen. Es ist also ein ganz schön großes Problem.
-
Wasserstoff.p=1; // Proton
Wasserstoff.e=1; // Elektron
Wasserstoff.n=0; // NeutronIn der Form handelt es sich um ein einzelnes H-Atom. Daher ist Wasserstoff hier ein Atom.
Eine Komposition zweier H-Atome ergibt dann ein Wasserstoffmolekül.
Daher würde ich für erste Versuche eine Klasse Atom und eine Klasse Molekül schaffen. Die Klasse Atom sollte alle für die Chemie wichtigen Attribute haben, die ein Atom auszeichnet.
Wie stellst Du Dir die Klasse Molekül vor?
-
@stealth00: O6Cl ? junge, junge ..., da solltest Du noch einmal drüber nachdenken.
Bei der oben skizzierten Reaktion spielt die Elektronegativität eine große Rolle. Daher wird sich zunächst KCl unter "Feuererscheinung" bilden. Dabei verbrennt dann auch Wasserstoff mit Sauerstoff, wahrscheinlich explosionsartig (Knallgas). Aus Wasserstoff und Chlor entsteht Chlorwasserstoff, der dann mit dem gebildeten Wasser dissoziativ zu Salzsäure (ionisierter Chlorwasserstoff) reagiert. Lustige Reaktion.
-
HI
Okey, soweit war ich schon.
Ich hab bei einfachen Molekülen an ein Array bzw. an einen vector von Atomen
gedacht. Jetz ergibt sich nur bei der Bindung folgendes Problem.Bei einer kovalenten Bindung verändert sich das Attribut Elektronen dahingehend das entweder welche dazu kommen, oder aber abgegeben werden.
Sie werden aber nicht wirklich abgegeben. Es ist halt ein Mittelding.
Wie sage ich also dass,das Atom jetz nicht mehr (nehmen wir die Halogene)
7 Aussenelektronen besitz sondern 8. Aber das stimmt ja auch nur begrenzt.
Ich kann ja nicht formal jedem der beiden Reaktionspartner ein Elektron klauen bzw. schenken. Sie werden ja nicht komplett abgegeben. Damit hab ich noch schwierigkeiten. Ich hab da einen Ansatz aus der Fuzzylogik. Ich könnte einfach sagen, dass das besagte Atom mit Sicherheit 1.2 oder so 8e- hat.Bei Ionenbindungen zB.: ergibt sich eigentlich nur das Problem, dass man dann nicht mehr von Atomen sprechen kann, weil eben Ionen, also müssten die auch eingeführt werden.
Ein anderer Ansatz ist die Benutzung einer Klasse Molekülorbital, auf das jedes beteiligte Atom einen Zeiger bekommt, weils ja zu beiden gehört.
Also so waren bis jetz meine Ideen.
-
HI
Also ich hab hier mal nen ersten Entwurf für ne Atomklasse.
class MO; class Atom { protected: char bonds; char valenz; short e; mutable short p; mutable short n; mutable float en; //evtl. größe relativ oder absolut float masse; //evtl. Elektronenaffinität //evtl. Ionisierungsenthalpien //evtl. Elektronenkonfiguration MO *mo; public: Atom(short p,short e,short n,float en,float m,char v); ~Atom(); virtual bool Bind(Atom &); //hier bin ich mir nicht sicher //und member methoden folgen }; //Die versch. Atome werden abgeleitet
Das ist noch recht einfach gehalten.
-
Original erstellt von stealth00:
hast du schon Chemie?Kein Kommentar.
Edit: Bei Flames solltest du nochmal nachdenken, wer von uns die ganze zeit flames schreibt.
[ Dieser Beitrag wurde am 25.06.2003 um 22:55 Uhr von Spieleprogrammierer editiert. ]
-
Ich hab dich bisher noch nicht geflamt! Lediglich ein Tipp gegeben wie du die besser Flames vom Hals halten kannst.
@EH:
Soweit ich weiss kann Clor mindestens ein Elektron dem Sauerstoff entziehen. Wie verhält es sich nochmal wenn mehrere Elektronen entzogen werden? Ich glaube die Energie, die zum lösen eines weiteren Elektronen benötigt werden, steigt nach und nach an. Oder lieg ich da falsch
zum O6Cl molekül, upss, meinte eigentlich OCL6 molekül da ja O 6 valent elektronen besitzt. Hab aber ja dazu geschrieben das ich das für unrealistisch halte, da ja wie oben schon gesagt die Menge der benötigten Energie steigt.
Hab halt kein Chemie studiert wie duNoch se ne kleine Off-Topic frage:
Es heisst ja e=mc^2 -> e=kg*(m^2/s²) ein kg=n0,9xxx das wären dann
Nm2s20,9xxx?
Stimmt das? Dann wären das doch am ende Joule bei e..
Photonen sind ja (wie du sagtest) e=h*f
h ist eine Konstante, f die Frequenz. Du hast irgendwo geschrieben das Gammastrahlung im GHz frequenz bereich liegt. In welchem Frequenz bereich liegen den "sichtbare" Photonen? (die das Auge wahrnimmt)/edit:
Hmm, O mit einer 6fachen minusladung erscheint mir doch ein bisschen hoch..
Kann man sowas überhaupt machen. Ich denke nur mit Fluor und Atomen aus der 3-5 Periode oder? (so ein Atom mit 50-60 elektronen gibt doch sicher mal 6 ab oder?)[ Dieser Beitrag wurde am 26.06.2003 um 00:25 Uhr von stealth00 editiert. ]
-
Original erstellt von prolog:
**HIAlso ich hab hier mal nen ersten Entwurf für ne Atomklasse.
class MO; class Atom { protected: char bonds; char valenz; short e; mutable short p; mutable short n; mutable float en; //evtl. größe relativ oder absolut float masse; //evtl. Elektronenaffinität //evtl. Ionisierungsenthalpien //evtl. Elektronenkonfiguration MO *mo; public: Atom(short p,short e,short n,float en,float m,char v); ~Atom(); virtual bool Bind(Atom &); //hier bin ich mir nicht sicher //und member methoden folgen }; //Die versch. Atome werden abgeleitet
Das ist noch recht einfach gehalten.**
du brauchst keine Valenz elektronen. Gib einfach die kompletten Elektronen an und dann kannst du die Elektronen per e=n^2*2 ausrechen.
e sind die elektronen, n die Schalen. bei 2 Schalen ist die Maximale anzahl der Elektonen 10 (8 in der L schale, 2 in der K schale) 2^2*2=8 (L schale) + 1^2*2=2 (in der K Schale)..
Was vielleicht noch notwendig ist, ist eine Formel mit der du die Energie berechnest für alle weiteren Elektronen (siehe Post weiter oben)Falls ich hier mist erzähle, EH, bitte net gleich hauen
/Edit ich würde die Atome übrigens nicht Hard-Coden sondern lieber per Script (lua oder so) laden!
Ist einfacher handzuhaben oder?[ Dieser Beitrag wurde am 26.06.2003 um 00:28 Uhr von stealth00 editiert. ]
-
HI
@Valenz elektronen
Ich hab die deshalb hardgecoded damit sie nicht immer erst berechnet werden müssen.
Ich hab mir inzwischen auch ein paar gedanken zu Molekülen gemacht.
Bei einfachen Verbindungen zB.: aus zwei Atomen nehme ich wol einen Vector, ich denke mal das ist auch recht intuitiv.Obwohl ich mir darüber eigentlich noch keine Gedanken wollte, hab ich auch schon mal über cyclische Moleküle nahgedacht. Ich hab da an verkettete Ringe gedacht. Dabei ist mir wie sollst auch anders sein wieder ein Problem aufgefallen. Es ist ja möglich das aliphaten sich zu ringen umlagern(sig Kohlenhydrate). Und noch viel schlimmer die meisten Kohlenhydrate haben nicht mal ne feste Struktur, die könne doch mutarotieren. Dadurch ist die konfiguration des Anomers nicht eindeutige bestimmt.
-
Original erstellt von stealth00:
**
@EH:
Soweit ich weiss kann Clor mindestens ein Elektron dem Sauerstoff entziehen. Wie verhält es sich nochmal wenn mehrere Elektronen entzogen werden? Ich glaube die Energie, die zum lösen eines weiteren Elektronen benötigt werden, steigt nach und nach an. Oder lieg ich da falsch
zum O6Cl molekül, upss, meinte eigentlich OCL6 molekül da ja O 6 valent elektronen besitzt. Hab aber ja dazu geschrieben das ich das für unrealistisch halte, da ja wie oben schon gesagt die Menge der benötigten Energie steigt.
Hab halt kein Chemie studiert wie duNoch se ne kleine Off-Topic frage:
Es heisst ja e=mc^2 -> e=kg*(m^2/s²) ein kg=n0,9xxx das wären dann
Nm2s20,9xxx?
Stimmt das? Dann wären das doch am ende Joule bei e..
Photonen sind ja (wie du sagtest) e=h*f
h ist eine Konstante, f die Frequenz. Du hast irgendwo geschrieben das Gammastrahlung im GHz frequenz bereich liegt. In welchem Frequenz bereich liegen den "sichtbare" Photonen? (die das Auge wahrnimmt)/edit:
[ Dieser Beitrag wurde am 26.06.2003 um 00:25 Uhr von [qb]stealth00** editiert. ][/QB]Wie du ja selbst gesagt hast besitz O 6 Aussenelektronen. Deshalb ist es 2 wertig.(gut es kann theoretisch von 1-6, alles sein) Kann also nicht 6 e- aufnehmen. Deshalb wird es mit OCl6 schwierig.
Zur frequenz Wellenlänge und Frequenz stehen über die Lichtgeschwindigkeit in direktem Zusammenhang.
f=c/wellenlängeDer sichtbare Bereich liegt bei 400-700 nm ca.
Kannst es also ausrechnen.
-
Bin wie gesagt kein Chemiker, aber manchmal ne wandelnde Informationsquelle
Noch ein wenig zu Automaten:
Die Idee der Automaten kommt von Stephen Wolfram, wem das nix sagt, er ist der Gründer und Entwickler von Mathematica. Er hat dazu auch Bücher geschrieben "Cellular Automata and Complexity" "A New Kind of Science" gibt noch zig Andere und nicht nur von Ihm.Und noch ein paar Links: http://www.santafe.edu/projects/evca/ http://www.fourmilab.ch/cellab/ http://cell-auto.com/
Vielleicht findet ihr unter SourceForge auch noch den ein oder anderen Quellcode
-> http://sourceforge.net/softwaremap/trove_list.php?form_cat=384Datenreduktion:
Aus meiner Sicht ist die Nutzung einer übergeordneten Instanz besser, denn so müßten auch nur die Moleküle in die Berechnungs Matrix einbezogen werden, die sich von ihrer Nähe beeinflußen würden, alle anderen bewegen sich weiterhin, sind aber 0 Werte in der Berechnung... Quasi wie eine "Collision Detection". Aus meiner physikalischen Sicht habt ihr doch wahrscheinlich später eine n-Körper Differentialgleichung, oder ?! Wie stellt ihr überhaupt den Raum dar ? Durch ein XYZ Gatter oder gibt ihr den Molekülen die Abstände zu ihren nächsten Nachbarn mit, letztere glaub ich ist die elegantere Version. Die die Einfluß aufeinander haben, besitzen Werte, alle anderen NULL. Die obere Instanz beobachtet und läßt rechnen... die Leerräume werden so nicht als Speicher benötigt !Winn
-
HI
Ich check jetz mal die Links. Danke schon mal.
-
HI
Also ich hab das jetz mal überflogen. Besonders das Thema celluläre Atomaten muss ich mir ganz genau anschauen. Bei SourceForge hab ich schon einige Libs gefunden dir nützlich sein könnten. Ich werd also jetz erstmal viel lesen.
-
Vektoren für Moleküle halte ich für nicht so gut.
Ich würde jedem MolekülAtom ein paar Zeiger geben, die dann auf die verbundenen Atome zeigen.
Nehmen wir zum Beispielstruct MolekuelAtom { MolekuelAtom *p1; MolekuelAtom *p2; MolekuelAtom *p3; MolekuelAtom *p4; int ID; }; MolekuelAtom at1,at2,at3; at1.ID=H; at2.ID=H; at3.ID=O; at3.p1=at1; at3.p2=at2; at1.p1=at3; at2.p1=at3;
Das ganze sollte man aber per Manager in einer Klasse machen, der ALLE Atome in einer Riesigen Liste verwaltet und dann die Atome immer untereinander verbindet. Achja, die anderen pxs müssten auf NULL gestellt werden. Über die Form des Moleküls würde ich mir vorerst keine Gedanken machen.
-
Original erstellt von prolog:
**Wie du ja selbst gesagt hast besitz O 6 Aussenelektronen. Deshalb ist es 2 wertig.(gut es kann theoretisch von 1-6, alles sein) Kann also nicht 6 e- aufnehmen. Deshalb wird es mit OCl6 schwierig.Zur frequenz Wellenlänge und Frequenz stehen über die Lichtgeschwindigkeit in direktem Zusammenhang.
f=c/wellenlängeDer sichtbare Bereich liegt bei 400-700 nm ca.
Kannst es also ausrechnen.**Ich will ja O nicht 6 é aufrücken sondern 6é entziehen.
Das bedeutet:
O2+6CL-> 2O(+6)+6CL(-1)Aber geht das überhaupt?
Ich glaube wenn man CL mit O reagieren lässt entstehen nicht 2 Ionen sondern ein (ionen)Molekül oder=?
-
Hi
Aber bei OCl6 wäre der Sauerstoff von 6 Cl Atomen umgeben, das sind bei ner kovalenten Bindung 12 Elektronen.
Wo sollen die hin ?
Cl Cl
\ /
Cl- O -Cl
/ \
Cl Cl
hmm als ich das geschrieben hab sah das noch ganz ordentlilch aus.
Ich red jetz mal wie mein alter Chemielehre. Der Sauerstoff is glücklich wenn er 2e- irgendwo her bekommt. Das Chlor seinerseits is glücklich wenn es irgen wo her 1e- bekommt. Der Sauerstoff will aber gar keine Elektronen abgeben, genau so wie das Chlor ganz ungern abgibt. Die beiden werden also aneinander vorbei fliegen und sich wen suchen der n Paar Elektronen übrig hat.Verstehst du was ich meine ?
Da musst du den Sauerstoff ganz schön "zwingen" damit er 6 Elektronen abgibt. Dann würde aber n O(6+) entstehen. Das wird schwierig.
Und beim Chlor is es noch ein bischen schwieriger.[ Dieser Beitrag wurde am 26.06.2003 um 13:45 Uhr von prolog editiert. ]
[ Dieser Beitrag wurde am 26.06.2003 um 13:48 Uhr von prolog editiert. ]
-
Gut sry, hab mich verschrieben. Meinte damals nicht OCL6 sonder sechsfach positiven Sauerstoff und 6 einfach negative Cloratome..
Ich hab ja schon selber gemeint das die Kraft vom Clorid wahrscheinlich nicht ausreicht um 6 elektronen vom O abzuspalten.
Aber mei, man lernt ja bekanntlich nur aus Fehlern
-
Jepp.
Is ja kein ding.
-
..
-
@Eh: Ich glaub du bringst mich noch dazu Chzu studieren