View previous topic :: View next topic |
Author |
Message |
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Wed Dec 27, 2006 11:01 am Post subject: Transformations |
|
Man ir problēma ar sin, cos, tan, ctg, pī matemātisko funkciju pielietošanu.
Varbūt es līdz galam neizprotu viņu nozīmi...
Piemēram ir figūra - rectangle (platums,augstums, poziicija left, un poziicija top)
Ir vajadīgs šo figūru pagriezt par N grādiem. Jautājums - kā ? |
|
Back to top |
|
|
nai
Joined: 20 Dec 2006 Posts: 48
|
Posted: Wed Dec 27, 2006 11:23 am Post subject: |
|
Aprēķini jaunās figūras katru punktu, izmantojot:
x' = x cos f - y sin f
y' = y cos f + x sin f |
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Wed Dec 27, 2006 12:08 pm Post subject: |
|
nai wrote: | Aprēķini jaunās figūras katru punktu, izmantojot:
x' = x cos f - y sin f
y' = y cos f + x sin f |
Tavs kods gadījumā nav domāts šādi:
x' = x*cos f - y*sin f
y' = y*cos f + x*sin f |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Wed Dec 27, 2006 12:10 pm Post subject: |
|
Paldies bubu! Tūlīt sākšu studēt! |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Dec 27, 2006 12:11 pm Post subject: |
|
Inf3rnal wrote: |
Tavs kods gadījumā nav domāts šādi:
x' = x*cos f - y*sin f
y' = y*cos f + x*sin f |
Tie tak ne ar ko neatšķirās.
Varbūt vēl gribēsi arī iekavas salikt: x' = x*cos(f) - y*sin(f) ? :)
Tas tak tikai tāds matemātisks pieraksts - ka izlaiž reizināšanas zīmi acīmredzamās vietās.
Tu tak matemātikā nerakstīji y = 2*x, bet gan vienkārši y=2x, vai ne? |
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Wed Dec 27, 2006 12:19 pm Post subject: |
|
Es saprotu, bet man pēc šis formulas sanāk, ka mana figura tiek pagrizta par nezin cik grādiem.....
Code: |
x = x * Math.Cos(30) - y * Math.Sin(30)
y = y * Math.Cos(30) + x * Math.Sin(30)
|
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Dec 27, 2006 12:50 pm Post subject: |
|
Vai tavas izmantotās valodas Math.Sin un Math.cos funkcijas argumentus sagaida grādos vai radiānos?
Uz datora parasti (ar retiem izņēmumiem) trigonometriskās funkcijas leņķi sagaida radiānos nevis grādos. |
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Wed Dec 27, 2006 12:53 pm Post subject: |
|
Patiešām: As single, measured in radians
Bet es nezinu kā lietot radiānus |
|
Back to top |
|
|
nai
Joined: 20 Dec 2006 Posts: 48
|
Posted: Wed Dec 27, 2006 1:09 pm Post subject: |
|
PI = 180 grādi
30 grādi ir PI/6 |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Dec 27, 2006 1:17 pm Post subject: |
|
Inf3rnal - vai tiešām skolā matemātiku nemācījies?
180 grādi = PI radiāni
30 grādi = x radiāni
reizinam krustā:
x * 180 = 30 * PI
x = 30 * PI / 180 = PI / 6 |
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Wed Dec 27, 2006 1:25 pm Post subject: |
|
Es laikam nepārāk skaidri izklāstu savas domas
Ar radiāniem es tiku galā, vienkārši nebija skaidrs pareizs pieraksts (manā gadījumā: Math.Pi / 2 , vai Math.Pi * 3, utt...)
Bet mana figūra tik un tā uzvedas dīvaini, paskatities uz manu kodu, kur esmu pieļāvis kļūdu ( visdrīzāk muļķīgu ):
Code: | Imports System.Drawing
Public Class frmMain
Dim x As Integer
Dim y As Integer
Dim angle As Integer
' Tiek definēts klucis :)
Private Sub frmMain_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim g As Graphics = e.Graphics
Dim bgRECT As Rectangle = New Rectangle(x, y, 64, 64)
g.DrawRectangle(Pens.Black, bgRECT)
End Sub
' Nospiežot pogu tam būtu japagriežas par N grādiem
Private Sub cmdRotate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRotate.Click
x = x * Math.Cos(angle) - y * Math.Sin(angle)
y = x * Math.Sin(angle) + y * Math.Cos(angle)
Me.Text = x & " " & y ' nekas svarīgs
Me.Invalidate() ' redraw
End Sub
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
x = 128
y = 128
angle = Math.PI / 2 ' leņķis par kuru jāpagrižas
End Sub
End Class |
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Dec 27, 2006 1:45 pm Post subject: |
|
Code: | x' = x*cos f - y*sin f
y' = y*cos f + x*sin f |
Tas nav tas pats, kas tev:
Code: | x = x * Math.Cos(angle) - y * Math.Sin(angle)
y = x * Math.Sin(angle) + y * Math.Cos(angle) |
Vai redzi, ka tev tajā forumā labajā pusē ir viens x, bet kreisajā cits - x'.
A bet tev abās vietās ir viens un tas pats x. |
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Wed Dec 27, 2006 1:57 pm Post subject: |
|
Kreisajā pusē ir tā saucamais x prim, un y prim , jeb jaunās koordinātes. Pareizi ?
Man likās, ka tā ir parasta darbība kurā balstotis uz ieprikšējām x un y vērtībām tiek izskaitļotas jaunās...
Tātad man vajag 2 citus mainīgos.... Tūlīt izmēģināšu!
Emm un ko darīt ar jauniegūtajiem x' un y' ? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Dec 27, 2006 3:51 pm Post subject: |
|
Pareizi tu saki - kurā balstotis uz ieprikšējām x un y vērtībām tiek izskaitļotas jaunās...
Uzsvars uz iepriekšējām!!
A bet paskaties pats uz savu kodu, kur tu skaitļo jauno y. Tur tu izmanto jauno x, nevis veco, redzi? |
|
Back to top |
|
|
|