Avatar billede eldaria Nybegynder
04. november 2003 - 17:41 Der 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. ;-)
Avatar billede martin_moth Mester
05. november 2003 - 08:32 #1
Har jeg forstået korrekt:

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)
Avatar billede eldaria Nybegynder
05. november 2003 - 16:14 #2
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....
Avatar billede martin_moth Mester
05. november 2003 - 17:12 #3
Fint :o)

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?
Avatar billede martin_moth Mester
05. november 2003 - 17:14 #4
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...
Avatar billede martin_moth Mester
05. november 2003 - 19:22 #5
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
Avatar billede eldaria Nybegynder
05. november 2003 - 19:31 #6
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. :-)
Avatar billede martin_moth Mester
05. november 2003 - 19:55 #7
Sinus og cosinus, samt forholdet mellem radianer og grader siger dig forhåbentligt noget....

Vender tilbage
Avatar billede eldaria Nybegynder
05. november 2003 - 20:00 #8
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
Avatar billede martin_moth Mester
06. november 2003 - 18:31 #9
Her er løsningen:

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
Avatar billede eldaria Nybegynder
06. november 2003 - 18:51 #10
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..
Avatar billede martin_moth Mester
07. november 2003 - 07:53 #11
Nå ja, en lille fejl (testede kuf for 45, 90, 135, ..., 360). Men du har styr på det nu, kan jeg høre :o)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester