Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Kreis in Basic darstellen

103 views
Skip to first unread message

Michael Kunas

unread,
Apr 11, 1997, 3:00:00 AM4/11/97
to

Halloechen..

Ich hab folgendes Problem.
ich moecht unter basic eine Analog-Uhr programmieren.
Wie kann ich den zeiger rotieren lassen.
mit circle(x,y) kann ich zwar einen Kreis zeichnen hab aber kein zweites
koordinatenpaar fuer die linie(zeiger)
Leider konnte mir niemand weiterhelfen.
ich arbeite mit Qbasic von MS-D*S


ich wuerde mich sehr freuen.


## CrossPoint v3.11 R ##

Arne Seifert

unread,
Apr 11, 1997, 3:00:00 AM4/11/97
to

Tagchen!

Michael_Kunas äußerte sich nun doch noch zu "Kreis in Basic darstellen"

MK> mit circle(x,y) kann ich zwar einen Kreis zeichnen hab aber kein zweites
MK> koordinatenpaar fuer die linie(zeiger)
Versuche mal folgendes:

screen 12
pi=3.14159
for a=0 to 2*pi step 2*pi/12
x=sin(a)*100+320
y=cos(a)*100+240
pset(x,y),15
next

So long,

Cosysop der Cyber System <<<----------------------->>> Call 038392-57849 NOW!
_Große Filebase, kostenloser Point, viele interessante Netze = Die Nr.1 in M/V!_

Sven

unread,
Apr 12, 1997, 3:00:00 AM4/12/97
to

High, Michael !

>> Am _11.04.97_ staunte der Laie und wunderte sich der Fachmann ueber
>> _"Kreis in Basic darstellen"_ von Michael_Kunas,
>> wonach meine Finger einem Zitterflash ueber der Tastatur erlagen :

MK> Halloechen..

MK> Ich hab folgendes Problem.
MK> ich moecht unter basic eine Analog-Uhr programmieren.
MK> Wie kann ich den zeiger rotieren lassen.
Ermh...zeichnen, löschen, neu zeichnen ? <scherz> ;-)


MK> mit circle(x,y) kann ich zwar einen Kreis zeichnen hab aber kein zweites
MK> koordinatenpaar fuer die linie(zeiger)

Also weg damit !
MK> Leider konnte mir niemand weiterhelfen.
Faule Säcke ! ;-)
Dein Mathelehrer bekommt 'ne 6 ! ;-))))
MK> ich arbeite mit Qbasic von M$-D*$
Prima, dann möchte ich Dir gerne helfen.

Also, Du brauchst ja mehrere Zeiger, deswegen legen wir die wichtigen
Werte in Variablen ab:

x = 160 'Mittelpunkt der Uhr
y = 100
farbe = 15 'Farbe des Zeigers
laenge = 80 'Länge des Zeigers
bereich = 12 'Wertebereich des Zeigers
zeit = ? 'Aktueller Wert für die Stunde/Minute/Sekunde
'Man kann auch Werte>BEREICH angeben. Somit ist
'dann egal, ob man 18 oder 6 für die Stunde
'übermittelt.

'Wir können die Endposition des Zeigers durch Sinus und Cosinus berechnen.
'Da wir die Endpositionen des Zeigers auf einem (gedachten) Kreis liegen.
'Ein voller Kreis umfasst 360 Radianten, diesen Teilen je nach Bereich auf
'und multiplizieren ihn mit dem aktuellen Wert für die Zeit.
'Damit die Sinusfunktionen diesen Wert auch fressen, müssen wir die
'Radianten in Grad umrechnen; das erledigt *PI/180.
CONST pi = 3.141592654# 'Geklaut aus der Help-Datei von Qbasic
w = -(360 / bereich * zeit + 180) * pi / 180
'Das "-" sorgt dafür, das die Uhr nicht rückwärts läuft und das
'addieren von 180 lässt die Uhr oben anfangen.

'Innerhalb des LINE-Befehls berechnen wir mittels SIN/COS die XY-
'Koordinaten des Punktes.
'Mit Hilfe dieser Formel lässt sich auch ein Kreis zeichnen, oder, mit
'etwas mehr Aufwand, die Markierungen am Rand der Uhr.
LINE (x, y)-(SIN(w) * laenge + x, COS(w) * laenge + y), farbe


Viel Erfolg und Happy Coding wünscht Dir

Spaceman

Microsoft Network is not allowed to reproduce this document in any way.

Win 1E6 $$$ by just staying alive !
No purchase neccessary - Prizes subject to non-availibility
No correspondence will be entered into.


Uwe Heller

unread,
Apr 13, 1997, 3:00:00 AM4/13/97
to

Als am *So* ,den *13.04.97* eine Mail von *michae...@beam-bbs.mvm.de*
bei mir auf dem Bildschirm zum Thema *"Kreis in Basic darstellen"* erschien,
spuerte ich den Drang dazu Folgendes loszuwerden:

> Halloechen..
>
> Ich hab folgendes Problem.
> ich moecht unter basic eine Analog-Uhr programmieren.
> Wie kann ich den zeiger rotieren lassen.
> mit circle(x,y) kann ich zwar einen Kreis zeichnen hab aber kein zweites
> koordinatenpaar fuer die linie(zeiger)

> Leider konnte mir niemand weiterhelfen.
> ich arbeite mit Qbasic von MS-D*S

Dann wollen wir mal.
Kreisgleichung : x*x + y*y = r*r (also y zum Quadrat usw.)
Der Radius r ist bekannt.
Fehlen also noch x + y !
Weiterhin ist bekannt, dass ein Kreis 360 Grad hat.
Bei 60 Sekunden sind das also 6 Grad pro Sekunde.
So koennen wir jetzt ein Dreieck konstruieren :

O+
O +
O--------O x koennte auch Hoehe des Dreieckes genannt werden
O x O
r O O
O O
O O
O O r
O O
Alpha O O
OO
O

Hypothenuse = r
Gegenkathete = x
Winkel Alpha = 6 Grad

sin Alpha = r / x
x = r / sin Alpha

Somit hast Du Deine neue x Koordinate.
Nun nur noch die Kreisgleichung umstellen :
Aus x*x + y*y = r*r wird
y*y = r*r - x*x
y = Wurzel aus ( r*r - x*x )
Klammern nicht vergessen !

So nun ist x und y bekannt !
Umrechnen in Dein Koordinatensystem, fertig !

Ich hoffe, dass ich das alles so richtig gemacht habe (es ist 22:35 und
ich bin total muede)........


Gruss
Uwe


=== Unser Morgen wird anders sein, wenn wir das Heute veraendern ! ===
=== (Hermann Gilhaus) ===
=== Mail: U.HE...@TRILOS.HAN.DE ===
## CrossPoint v3.11 ##

Michael Herrmann

unread,
Apr 13, 1997, 3:00:00 AM4/13/97
to

MK> Wie kann ich den zeiger rotieren lassen.
MK> ich arbeite mit Qbasic von MS-D*S

(ohne test und qbasic zu kennen) versuchs mal so aehnlich:

for x=0 to 359 step (359 / 12) rem oder / 60 ?
xk=r*cos(x)+x0
for y=0 to 359 step (359 / 12) rem oder / 60 ?
yk=r*sin(y)-y0
rem hier die linie nach xk,yk zeichnen
line(x0,y0)-(xk,yk)
next y
next x

hinweise:

ohne geweaehr, vielleicht stimmt ein vorzeichen oder ein teiler nicht, aber
wenn du mit den parametern ein wenig fummelst, klappt es bestimmt.
r radius des kreises
x0,y0 mittelpunkt des kreises
die sin() und cos() funktionen muessen im grad-system arbeiten, ansonsten
statt 359 2*Pi einsetzen!

gruss
micha

Mario Gliewe

unread,
Apr 14, 1997, 3:00:00 AM4/14/97
to

> Halloechen..
>
> Ich hab folgendes Problem.
> ich moecht unter basic eine Analog-Uhr programmieren.
> Wie kann ich den zeiger rotieren lassen.
> mit circle(x,y) kann ich zwar einen Kreis zeichnen hab aber kein zweites
> koordinatenpaar fuer die linie(zeiger)
> Leider konnte mir niemand weiterhelfen.
> ich arbeite mit Qbasic von MS-D*S

Vieleicht so:
x(grad)=sin(grad)*r
y(grad)=cos(grad)*r

--
CU maG

0 new messages