PDA

Επιστροφή στο Forum : visual basic 6



ΓΙΑΝΝΗΣ 456
05-03-09, 21:16
κατασκευη σε VB 6 δεικτη ρολογιου.
ο οποιος θα περιστρεφεται απο εναν αξονα. και θα εχει σταθερη ακτινα.
Αυτο που δεν μπορω να πετυχω ειναι η περιστροφη με σταθερη ακτινα.
το προγραμμα που εχω γραψει μεχρι τωρα ειναι:

Private Sub Image1_Click()
Timer1.Enabled = True
Timer1.Interval = 10
End Sub
Private Sub Timer1_Timer()
Line1.X2 = Line1.X2 + 10
End Sub

και αναφερεται σε μια ευθεια γραμμη η οποια εχει για αρχη το χ1 και y1 τα οποια βρισκονται στο κεντρο ενος κυκλου και λιγο πριν απο την περιμετρο του κυκλου βρισκονται τa χ2 και y2.
μεταβαλοντας το χ2 δεν μπορω να πετυχω αναλογη μεταβολη του y2 για να κρατισω σταθερη ακτινα.
χρησιμοποιησα την συναρτηση του κυκλου y=sqr(r^2-x^2) και η vb βγαζει σφαλμα.

θα μου πειτε τωρα τι τα θελω αυτα.
αυτο που θελω να κανω στην πραγματικοτητα ειναι ενα στροφομετρο παρομοιο με αυτο που εχει το προγραμμα labView. και απο καπου πρεπει να αρχισω.

ΓΙΑΝΝΗΣ 456
05-03-09, 21:45
το προβλημα μου δημιουργειτε απο τον παρακατω τυπο
Line1.Y2 = Sqr((300 ^ 2) - (Line1.X2 ^ 2))

που η θεση του στο προγραμμα ειναι.
Private Sub Image1_Click()
Timer1.Enabled = True
Timer1.Interval = 10
End Sub
Private Sub Timer1_Timer()
Line1.X2 = Line1.X2 + 10
Line1.Y2 = Sqr((300 ^ 2) - (Line1.X2 ^ 2))
End Sub
το 300 ειναι η ακτινα του κυκλου

kopla
05-03-09, 22:40
(300 ^ 2) - (Line1.X2 ^ 2)
To X2 αυξάνεται συνεχώς (Line1.X2 = Line1.X2 + 10) και όταν γίνει μεγαλύτερο απο 300 τότε θα υπολογίσεις ρίζα αρνητικού αριθμού. Εδω θα χτυπάει.


Η vb6 έχει ψοφίσει και έχει βρωμίσει. Της εχουμε κανει και τα 40 και τα 3χρονα. Θα δω μήπως την εγκαταστήσω για να σε βοηθήσω.
Αν καταλαβα καλά, κανεις λαθος προσέγγιση. Χρειάζεσαι πολικές συντεταγμένες (ψ =ρ.ημφ χ=ρ.συνφ)

ΓΙΑΝΝΗΣ 456
05-03-09, 22:45
κατι τετοιο θελω αλλα δεν ξερω το πως

kopla
05-03-09, 22:51
Καλα.
Μισο λεπτό τότε..........

kopla
05-03-09, 23:38
Για δες αυτό.
_________________________________________


Const step As Single = 30 ' Το βήμα σε μοίρες
Const R As Integer = 300 ' Η ακτίνα

Dim deg As Double ' Υπολογισμένες Μοίρες
Dim rad As Double ' Υπολογισμένα Ακτίνια (για το Math.{})

Dim newX As Double ' Το νέο Χ2
Dim newY As Double ' Το νέο Υ2


Private Sub Form_Load()
deg = 0# ' Αρχικοποίση σε 0 μοίρες
End Sub


Private Sub Timer1_Timer()
' Οι νεες μοίρες με αναδίπλωση 1,2, ... 358,359, 0,1, ...
' Αυτό για να μην γίνει overflow
deg = ((deg + step) Mod 360)
rad = deg * Pi / 180# ' Μετατροπή σε ακτίνια

' Υπολογισμός πολικών συντεταγμένων
newX = R * Cos(rad)
newY = R * Sin(rad)

' Αναθεση τιμών και πρόσθεση των Χ1,Υ1 offset ώστε
' να γυρίζει γύρω γύρω πάντα από (Χ1,Υ1) (όπου να να'ναι αυτό)
Line1.X2 = newX + Line1.X1
Line1.Y2 = newY + Line1.Y1
End Sub

aeonios
06-03-09, 08:58
Γιαννη για να μην παιδεύεσαι υπάρχει και το έτοιμο:
http://www.planet-source-code.com/vb/scripts/BrowseCategoryOrSearchResults.asp?lngWId=1&grpCategories=-1&txtMaxNumberOfEntriesPerPage=50&optSort=&blnTopCode=True&blnResetAllVariables=False&intFirstRecordOnPage=&intLastRecordOnPage=&intMaxNumberOfEntriesPerPage=50&intLastRecordInRecordSet=&txtCriteria=gauge&cmdGoToPage=1&lngMaxNumberOfEntriesPerPage=50

ΓΙΑΝΝΗΣ 456
06-03-09, 18:31
ευχαριστω για τις απαντησεις .

ΓΙΑΝΝΗΣ 456
06-03-09, 19:34
kopla συγνωμη που γινομαι ενοχλητικος αλλα το δοκιμασα το προγραμμα που μου εδωσες και δεν ξεκινα σιγουρα κανω κατι λαθος.
αυτο που βαζω στο παραθυρο ειναι μια γραμμη line1 και ενα timer1 αλλα το προγραμμα δεν ξεκινα τι να κανω;:confused1:
δοκιμασα να βαλω στο load form να αρχιζει να μετραει το ρολοι και να του δινει χρονο στο interval 1000ms. Οταν περναει το δευτερολεπρτο η γραμμη απο καθετη γινετε με την μια οριζοντια χωρις να παρει τα ενδειαμεσα βηματα.:confused1:

kopla
06-03-09, 21:24
Ναι λείπει η δήλωση του pi

Const pi As Double = 3.14

Βάλτο και είσαι ΟΚ

ΓΙΑΝΝΗΣ 456
06-03-09, 21:39
οκ δουλεψε.
Εισαι φοβερος.:lool:

kopla
06-03-09, 22:06
Αν θες περιστροφή αριστερόστροφα τότε αλλαξε το προσημο σε πλην:

deg = ((deg - step) Mod 360)

ΓΙΑΝΝΗΣ 456
07-03-09, 11:58
εχω μια απορια πανω στο προγραμμα που μου εδωσες
deg = ((deg - step) Mod 360)
το mod που γραφεις τι εντολη ειναι γιατι πρωτη φορα την βλεπω.:001_smile:

kopla
07-03-09, 17:51
mod = modulo δλδ επιστρέφει το υπόλοιπο (ακέραιος) της διαίρεσης.
Οι μοίρες αυξάνονται συνεχώς απο 0, 1, 2 ,.... 359, 360, 361 .... κτλ. Το αποτέλεσμα κάποτε θα γίνει τεράστιο και θα εχεις overflow (με το + ) ή underflow με το πρόσημο (-). Τα πιθανα υπόλοιπα της διαίρεσης ενός αριθμού με το 360 είναι από 0 εως και 359.

360 mod 360 μας δίνει 0 (360/360 = 1 και υπόλοιπο 0)
370 mod 360 μας δίνει 10 (370/360 = 1 και υπόλοιπο 10)

οκ?

ΓΙΑΝΝΗΣ 456
07-03-09, 18:03
ok.:lool::lool::lool::lool::lool: