Springen naar inhoud

Moleculen tekenen met python


  • Log in om te kunnen reageren

#1

ourobouros

    ourobouros


  • 0 - 25 berichten
  • 3 berichten
  • Gebruiker

Geplaatst op 16 januari 2011 - 17:31

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

Veranderd door ourobouros, 16 januari 2011 - 17:34


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Kravitz

    Kravitz


  • >1k berichten
  • 4042 berichten
  • Moderator

Geplaatst op 16 januari 2011 - 20:01

Verplaatst naar programmeren.
"Success is the ability to go from one failure to another with no loss of enthusiasm" - Winston Churchill

#3

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 16 januari 2011 - 20:18

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.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

#4

ourobouros

    ourobouros


  • 0 - 25 berichten
  • 3 berichten
  • Gebruiker

Geplaatst op 16 januari 2011 - 22:15

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.

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'.

Veranderd door ourobouros, 16 januari 2011 - 22:17


#5

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 17 januari 2011 - 13:02

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.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

#6

ourobouros

    ourobouros


  • 0 - 25 berichten
  • 3 berichten
  • Gebruiker

Geplaatst op 17 januari 2011 - 14:49

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.

Veranderd door ourobouros, 17 januari 2011 - 14:50






0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures