dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Transformations
Goto page 1, 2, 3  Next
 
dev.gamez.lv Forum Index -> Grafikas programmēšana un teorija
View previous topic :: View next topic  
Author Message
Inf3rnal



Joined: 15 Jun 2006
Posts: 118
Location: Neverland

PostPosted: 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
View user's profile Send e-mail
nai



Joined: 20 Dec 2006
Posts: 48

PostPosted: 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
View user's profile
Inf3rnal



Joined: 15 Jun 2006
Posts: 118
Location: Neverland

PostPosted: 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
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed Dec 27, 2006 12:08 pm    Post subject:

sin/cos/tg nozīme ir visai vienkārša:
Ja tev ir taisleņķa trijstūris, tad sinuss no viena šaurā leņķa ir leņķa pretkatetes garuma attiecība pret hipotenūzas garumu. Attiecīgi cosinuss ir piekatetes garums pret hipotenūzas garumu un tg ir pretkatetes pret piekatetes garumu attiecība. ctg ir vienkārši 1 dalīts ar tg. Tb ctg(a) * tg(a) = 1
Un pī jau nu vajadzētu būt zināmam - tas ir 180 grādi radiānos. Vienkārši citādāka leņķu mērvienība. Līdzīgi kā metri un collas - mēra vienu un to pašu, taču savādākā mērvienībām.

A par rotācijām plaknē, tb kā to iegūst, lasi te:
http://www.cgafaq.info/wiki/Deriving_Rotation_Formulas (īpaši Geometric derivation sadaļu)
http://www.math.washington.edu/~king/coursedir/m445w01/syl/class/rotationformula/rotformula.html

Edit: reku vēl vienkāršs aparaksts - http://www.faqts.com/knowledge_base/view.phtml/aid/39405/fid/1856 (lai gan ascii arts nav uzreiz saprotams ;)


Last edited by bubu on Wed Dec 27, 2006 12:13 pm; edited 3 times in total
Back to top
View user's profile Send e-mail
Inf3rnal



Joined: 15 Jun 2006
Posts: 118
Location: Neverland

PostPosted: Wed Dec 27, 2006 12:10 pm    Post subject:

Paldies bubu! Tūlīt sākšu studēt!
Back to top
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
Inf3rnal



Joined: 15 Jun 2006
Posts: 118
Location: Neverland

PostPosted: 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
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
Inf3rnal



Joined: 15 Jun 2006
Posts: 118
Location: Neverland

PostPosted: Wed Dec 27, 2006 12:53 pm    Post subject:

Patiešām: As single, measured in radians
Bet es nezinu kā lietot radiānus Smile
Back to top
View user's profile Send e-mail
nai



Joined: 20 Dec 2006
Posts: 48

PostPosted: Wed Dec 27, 2006 1:09 pm    Post subject:

PI = 180 grādi

30 grādi ir PI/6
Back to top
View user's profile
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
Inf3rnal



Joined: 15 Jun 2006
Posts: 118
Location: Neverland

PostPosted: Wed Dec 27, 2006 1:25 pm    Post subject:

Es laikam nepārāk skaidri izklāstu savas domas Embarassed
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
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
Inf3rnal



Joined: 15 Jun 2006
Posts: 118
Location: Neverland

PostPosted: 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
View user's profile Send e-mail
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Grafikas programmēšana un teorija All times are GMT + 2 Hours
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group