Επιστροφή στο 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 ειναι η ακτινα του κυκλου
(300 ^ 2) - (Line1.X2 ^ 2)
To X2 αυξάνεται συνεχώς (Line1.X2 = Line1.X2 + 10) και όταν γίνει μεγαλύτερο απο 300 τότε θα υπολογίσεις ρίζα αρνητικού αριθμού. Εδω θα χτυπάει.
Η vb6 έχει ψοφίσει και έχει βρωμίσει. Της εχουμε κανει και τα 40 και τα 3χρονα. Θα δω μήπως την εγκαταστήσω για να σε βοηθήσω.
Αν καταλαβα καλά, κανεις λαθος προσέγγιση. Χρειάζεσαι πολικές συντεταγμένες (ψ =ρ.ημφ χ=ρ.συνφ)
ΓΙΑΝΝΗΣ 456
05-03-09, 22:45
κατι τετοιο θελω αλλα δεν ξερω το πως
Καλα.
Μισο λεπτό τότε..........
Για δες αυτό.
_________________________________________
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
Γιαννη για να μην παιδεύεσαι υπάρχει και το έτοιμο:
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:
Ναι λείπει η δήλωση του pi
Const pi As Double = 3.14
Βάλτο και είσαι ΟΚ
ΓΙΑΝΝΗΣ 456
06-03-09, 21:39
οκ δουλεψε.
Εισαι φοβερος.:lool:
Αν θες περιστροφή αριστερόστροφα τότε αλλαξε το προσημο σε πλην:
deg = ((deg - step) Mod 360)
ΓΙΑΝΝΗΣ 456
07-03-09, 11:58
εχω μια απορια πανω στο προγραμμα που μου εδωσες
deg = ((deg - step) Mod 360)
το mod που γραφεις τι εντολη ειναι γιατι πρωτη φορα την βλεπω.:001_smile:
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:
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.