1 van 1

Moleculen tekenen met python

Geplaatst: zo 16 jan 2011, 17:31
door ourobouros
Helaas ben ik weereens veel te laat begonnen aan een taak en vroeg me nu het volgende af:

1. Hoe ontleed je een tupel zo effectief mogenlijk om vervolgens op elke aparte string een functie toe te passen.

2. Doormiddel van vpython moeten we spheren, die atomen voorstelllen, tekenen. Nu gezien moleculen bestaan uit atomen moeten we de verschillende atomen naast elkaar tekenen op de x-as.

Mijn plan hiervoor: Opdat een atoom 1 met middelpunt (x,y,z) grenst aan een atoom2 volstaat het toch om als middelpunt voor atoom2 (straal(atoom2)+ straal(atoom1),y,z) te kiezen. Omdat dit moet gelden voor een hele rij atomen moet men dus enkel bij de straal van het atoom zelf, de straal van het vorige optellen.

De vraag: hoe schrijf men dat 2 spheren elkaar grensen (is hier een methode voor of ingebakken functie) in vpython

Hoe maak je een functie op de index van een tupel + diezelfde functie op de vorige index in het tupel. (Python antwoord met steeds in de for-lus dat i+1 niet mag)

Hartstikke bedankt op voorhand

Re: Moleculen tekenen met python

Geplaatst: zo 16 jan 2011, 20:01
door Kravitz
Verplaatst naar programmeren.

Re: Moleculen tekenen met python

Geplaatst: zo 16 jan 2011, 20:18
door jhnbk
Kan je iets specifieker da vragen toelichten. Desnoods met een stukje voorbeeld code. Ik, en nog wat mensen op dit forum, kennen wel wat van python maar niet echt iets van moleculen. Je moet dus specifieker zijn.

Re: Moleculen tekenen met python

Geplaatst: zo 16 jan 2011, 22:15
door ourobouros

Code: Selecteer alles

def teken_atoom(atoom,x,y,z):

from visual import sphere

atoom=PeriodicSystem.getAtom(atoom)

return sphere(pos=(x,y,z),radius=atoom.radius)

def teken_molecule(tuple):

for i in tuple:

atoom=PeriodicSystem.getAtom(i)

return teken_atoom(i,atoom.radius+radius[i+1],0,0)
Met het tekenen van 1 enkel atoom gaat er niet mis. Hij neemt de string als input zoekt de corresponderende straal en neemt dan gewoon de (x,y,z) waarden die de gebruiker invoert als middelpunt.

Code: Selecteer alles

teken_atoom('P',0,0,0)

<vis.primitives.sphere object at 0x03AD0EA0>
Wat ik wil doen is een tupel bv:('P','O','S') ontleden. Elk atoom in het tupel wordt apart genomen en teken_atom wordt erop toegepast. De for-loop gaat de respectievelijke strings af en past teken_atoom toe met in de x coordinaat de som van de straal van de vorige atoom + diens eigen.

Hoe vermeld je dus dat de waarde van de x-coordinaat, de som is van een functie (atoom.radius) toegepast op de vorige index + diezelfde index ?

De afstand tussen 2 ballen wanneer ze zich raken is de som van de 2 stralen. Je begint met 'P' te tekenen voor een vast midelpunt en dan wil je 'O' tekenen op dusdanige wijze dat deze 'P' raakt. Dit is immers niets anders dan in de x-coordinaat de straal van 'P' te nemen en deze toe te voegen aan de straal van 'O'.

Re: Moleculen tekenen met python

Geplaatst: ma 17 jan 2011, 13:02
door jhnbk

Code: Selecteer alles

def teken_molecule(tuple):

	for i in tuple:

		atoom=PeriodicSystem.getAtom(i)

		return teken_atoom(i,atoom.radius+radius[i+1],0,0)
je kan bij i niet bijtellen lijkt mij. Verder zie ik ook niet wat atoom is. Ik vermoed een String.

Het blijft vrij vaag.

Re: Moleculen tekenen met python

Geplaatst: ma 17 jan 2011, 14:49
door ourobouros
Hoe programmeer je naar het vorige index in een tupel te gaan en daar een funtie op toe te passen. De waarde van deze functie op die string moet worden opgeteld bij diezelfd functie op de index zelf.

Stel ('p','o','s') een functie zet 'p' om in een getal, 'o' om in eeg getal en 's' om in een getal. M.a.w hoe ontleed ik een tupel en pas vervolgens een functie toe op de aparte strings.

Dan bij het getal van o moet het getal van p worden opgeteld. Zie je ? de functie op de index van een tupel opgeteld bij de functie op de vorige index.