04. november 2003 - 17:41Der er
10 kommentarer og 1 løsning
Udregen en linies position i en cirkel.
Jeg har en Form med en cirkel og en Linie.
Linien går fra midten af cirkelen til kanten, Nu vil jeg ved at have en textbix lade en person indtaste en værdi mellem 0 og 360, og så viser linien den værdi ved at rotere stregen. Jeg var aldrig god til at udregne den slags ting i skolen. ;-)
Ligger linien vandret fra cirklens centrum og når ud til cirklens kant, og så skal en person indtaste en værdi mellem 0 og 360 (som et antal grader, formoder jeg), og så skal linien roteres omkring cirklens centrum, og vise den indtastede værdi som en vinkelændring?
Svar lige ja/nej, så skal jeg hjælpe dig videre :o)
Ja, Den går nu fra midten til toppen af cirkelen. Så skal jeg bare ku give en værdi mellem 0 og 360, (Modsvare grader) og så stiller stregen sig i den position der modsvarer den grad. for exemepl 90 Grader er til Højre 180 grader er nedaf osv....
Normalt er førsteaksen altså nul grader, men du vil have 2. aksen til at være 0 grader - det er ok...
Måden du optegner linien på er ved at angive startpunkt (cirklens centrum) og slutpunkt (på cirklens rand).
Altså er liniens startkoordinat altid den samme, og slutkoordinaten afhænger af vinklen - altså skal du omregne fra en vinkel til nogle koordinater.
Det kan du gøre ved hjælp af cosinus og sinus, det står i den lille blå formelsamling fra folkeskolen.
Og så er der det med fortegn osv - for lethedens skyld ville jeg, hvis jeg var dig, regne koordinaterne ud i det første kvadrant, og så omskrive koordinaterne hvis vinklen er større end 90 - altså er vinklen 180>v>90 ville jeg udregne koordinaterne for v-90, og derefter omskrive koordinaterne - som du vil indse, er y_ny = x_gammel og x_ny = -y_gammel...
Tilsvarende for vinkler i 3. og 4. kvadrant.
Er det hjælp nok, eller skal du også have det kodet for dig?
Bare for en god ordens skyld - enhedscirklen, som man bruger når man lærer om cos og sin, er med vinklen 0 vandret mod højre, og måles positiv MOD uret. Det du vil er omvendt, kan jeg se - ikke noget problem, bare du er opmærksom på at din vinkelangivelse er lidt atypisk...
Og så til sidst: Husk, at VB regner i radianer. Forholdet mellem radianer og grader er som bekendt pi/180, så det skal du have med når du regner vinkler
Hehe hvis du har et lille stykke kode ville jeg blive glad, Jeg har ikke nogle bøger fra skolen da jeg ikke gick i Dansk skole, og ikke har været i skole i mange år. :-) Din forklaring siger mig ikke så meget, men det er nok også bare mig. :-) Jeg har en tendens at forstå kode med kommentare bedre. :-)
Jeg har ikke en eneste gang brugt Værken pi(3.14), Sinus, Cosinus, eller Radianer på de seneste 10 år, så Det kan jeg helt ærligt ikke huske. ;-) Det er lidt ærvligt... Men når man ikke bruger det så går det i glemme... Spørg mig næsten vad som helst om Amiga 500's Hardware så kan jeg fortælle dig det meste. :-D
Lav en form - gør den tilpas stor. Put en linie på formen, med navn Line1. Put en knap på formen med navn Command1. Put en textbox på formen med navn Text1. Copy-paste følgende kode. Voilà...
Option Explicit Dim Pi As Double Dim CentrumX As Long Dim CentrumY As Long Dim RandX As Long Dim RandY As Long Dim Radius As Long
Private Sub Command1_Click() Dim vinkelRAD As Double Dim vinkelGRAD As Double
vinkelGRAD = Val(Text1.Text)
Select Case vinkelGRAD Case 0 To 90 Line1.X2 = CentrumX + Round(Cos(GRAD_to_RAD(vinkelGRAD)) * Radius, 0) Line1.Y2 = CentrumY - Round(Sin(GRAD_to_RAD(vinkelGRAD)) * Radius, 0) Case 91 To 180 Line1.X2 = CentrumX - Round(Sin(GRAD_to_RAD(vinkelGRAD - 90)) * Radius, 0) Line1.Y2 = CentrumY - Round(Cos(GRAD_to_RAD(vinkelGRAD - 90)) * Radius, 0) Case 181 To 270 Line1.X2 = CentrumX - Round(Cos(GRAD_to_RAD(vinkelGRAD - 180)) * Radius, 0) Line1.Y2 = CentrumY + Round(Sin(GRAD_to_RAD(vinkelGRAD - 180)) * Radius, 0) Case 271 To 360 Line1.X2 = CentrumX + Round(Cos(GRAD_to_RAD(vinkelGRAD - 270)) * Radius, 0) Line1.Y2 = CentrumY + Round(Sin(GRAD_to_RAD(vinkelGRAD - 270)) * Radius, 0) Case Else MsgBox "Du har ikke indtastet et heltal mellem 0 og 360", vbOKOnly, "Fejl" Exit Sub End Select End Sub
Private Sub Form_Load() Command1.Caption = "Vis vinkel" Text1.ToolTipText = "Indtast heltal mellem 0 og 360"
'Sætter værdier for konstanter Pi = 3.14 Radius = 1000 CentrumX = 3000 CentrumY = 3000 RandX = CentrumX + Radius RandY = CentrumY
'Flytter linien på plads Line1.X1 = CentrumX Line1.X2 = RandX Line1.Y1 = CentrumY Line1.Y2 = RandY End Sub
Private Function GRAD_to_RAD(ByVal Gradtal As Long) As Double GRAD_to_RAD = Gradtal / 180 * Pi End Function
ok, det virkede, Dog skulle der lige skiftes rundt på cos og sin på den der udregner vinkler mellem 271 og 360, ellers roterer den de siste 90 grader med uret. Takker mange gange..
Nå ja, en lille fejl (testede kuf for 45, 90, 135, ..., 360). Men du har styr på det nu, kan jeg høre :o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.