![]() |
Diese prozedur gängig machen
Hi!!
ich hab da ne prozedur, sie funktioniert (syntaktisch), aber nicht sinn gemäß. Hier mal eine kostprobe: Quellcode: zusammenfalten | markieren
Delphi-Quellcode:
bitte nicht verwechseln: Rad=Radius des kreises in Pixel
procedure TForm1.DrawModel(Canvas:TCanvas;AtomNr,Rad:integer);
var x0,y0,n,k:integer; a,sa:Real; begin x0:=Form1.ClientWidth div 2; {Mitte der Form finden} y0:=Form1.ClientHeight div 2; a:=ANr / 2; {Formel für bestimmung von Elektronen pro Schale: 2*n^2} sa:=sqrt(a); {Gleichung aufstellen: nach n auflösen; ges.:n=Anzahl SchAle} n:=round(sa); {Atom Nummer=2*n^2 | /2} {<=> Atom Nummer/2=n^2 | Wurzel} {<=> Wurzel(Atom Nummer/2) = n} Canvas.Ellipse(x0-Rad,y0-Rad,x0+Rad,y0+Rad); {Für den (Atom)Kern} for k:=1 to n do {n gefunden} begin Canvas.Ellipse(x0-(Rad*k),y0-(Rad*k),x2+(Rad*k),y0+(Rad*k));{Kreise zeichnen mit gleichem Abstand} end; end; er zeichnet statt n Kreise nur einen.. ich weiss nicht mehr, was daran so rumzufeilen ist, obwohl das echt simpel ist... :wall: Naja danke im Voraus MfG LkZ |
Re: Diese prozedur gängig machen
was ist denn ANr und x2 ?
|
Re: Diese prozedur gängig machen
ich denke das der alte kreis immer übermalen wird ... ich kanns aber nicht genau sagen weil ich Anr und x2 nicht weiß
|
Re: Diese prozedur gängig machen
ja..ne sind tippfehler
x2=x0 und ANr=AtomNr (Parameter der prozedur) sorry MfG |
Re: Diese prozedur gängig machen
"[Fehler] Unit1.pas(31): Inkompatible Typen: 'Integer' und 'Extended'"
mach mal atomnr zu ner real zahl ;)
Delphi-Quellcode:
AtomNr:=5 / 2; macht aber nicht das nach der formel :gruebel:
AtomNr:=5 / 2; {Formel für bestimmung von Elektronen pro Schale: 2*n^2
ich würde a auch mal initialisieren... |
Re: Diese prozedur gängig machen
naja, also es macht keinen Unterschied.. :) immernoch das selbe problem
|
Re: Diese prozedur gängig machen
Ich sehe nicht, wieso Anr eine real-Zahl sein sollte.
Nachtrag: Ok, zu langsam ;) Nachtrag: bei mir geht der Code einwandfrei. Zumindest wird ein Kreis gezeichnet, der abhängig von "Rad" und "AtomNr" seinen Radius ändert. Was genau geht denn nicht? |
Re: Diese prozedur gängig machen
Hier ist nochmal der "richtige" code (ohne Tippfehler :wink: )
Delphi-Quellcode:
abgesehen von der Formel, weiss ich, wegen den rundungen
procedure TForm1.DrawModel(Canvas:TCanvas;AtomNr:Real;Rad:integer);
var x0,y0,n,k:integer; a,sa:Real; begin x0:=Form1.ClientWidth div 2; {Mitte der Form finden} y0:=Form1.ClientHeight div 2; a:=AtomNr / 2; {Formel für bestimmung von Elektronen pro Schale: 2*n^2} sa:=sqrt(a); {Gleichung aufstellen: nach n auflösen; ges.:n=Anzahl SchAle} n:=round(sa); {Atom Nummer=2*n^2 | /2} {<=> Atom Nummer/2=n^2 | Wurzel} {<=> Wurzel(Atom Nummer/2) = n} Canvas.Ellipse(x0-Rad,y0-Rad,x0+Rad,y0+Rad); {Für den (Atom)Kern} for k:=1 to n do {n gefunden} begin Canvas.Ellipse(x0-(Rad*k),y0-(Rad*k),x0+(Rad*k),y0+(Rad*k)); {Kreise zeichen mit gleichem Abstand} end; end; bei der for-to-do Schleife müsste eigentl. k:=2 to n, weil die zeile vor der schleife den Atomkern zeichnet. wenn k:=1 und Rad*k = Rad, dann haut das nicht wirklich hin. Toll ....2. Problem MfG :) |
Re: Diese prozedur gängig machen
war nur beiläufig...
aber ich glaube das dzdas besser mit ner function machen solltest - vl geht das gezeichnete verloren ... |
Re: Diese prozedur gängig machen
Zitat:
Oder man macht es im OOP, da hab ich aber meine mängel. MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz