It looks like you're new here. If you want to get involved, click one of these buttons!

- 141.2K All Categories
- 103.9K Programming Languages
- 6.5K Assembler Developer
- 1.9K Basic
- 40K C and C++
- 2.9K C#
- 7.9K Delphi and Kylix
- 4 Haskell
- 9.7K Java
- 4.1K Pascal
- 1.3K Perl
- 2K PHP
- 552 Python
- 37 Ruby
- 4.4K VB.NET
- 1.6K VBA
- 20.9K Visual Basic
- 2.6K Game programming
- 317 Console programming
- 93 DirectX Game dev
- 1 Minecraft
- 112 Newbie Game Programmers
- 2 Oculus Rift
- 9K Applications
- 1.8K Computer Graphics
- 746 Computer Hardware
- 3.5K Database & SQL
- 535 Electronics development
- 1.6K Matlab
- 628 Sound & Music
- 258 XML Development
- 3.3K Classifieds
- 199 Co-operative Projects
- 199 For sale
- 190 FreeLance Software City
- 1.9K Jobs Available
- 605 Jobs Wanted
- 213 Wanted
- 2.9K Microsoft .NET
- 1.8K ASP.NET
- 1.1K .NET General
- 3.4K Miscellaneous
- 7 Join the Team
- 356 Comments on this site
- 71 Computer Emulators
- 2.1K General programming
- 187 New programming languages
- 640 Off topic board
- 226 Mobile & Wireless
- 98 Android
- 126 Palm Pilot
- 340 Multimedia
- 156 Demo programming
- 184 MP3 programming
- Bash scripts
- 27 Cloud Computing
- 53 FreeBSD
- 1.7K LINUX programming
- 371 MS-DOS
- Shell scripting
- 321 Windows CE & Pocket PC
- 4.1K Windows programming
- 944 Software Development
- 417 Algorithms
- 68 Object Orientation
- 92 Project Management
- 95 Quality & Testing
- 271 Security
- 7.7K WEB-Development
- 1.8K Active Server Pages
- 62 AJAX
- 6 Bootstrap Themes
- 55 CGI Development
- 28 ColdFusion
- 224 Flash development
- 1.4K HTML & WEB-Design
- 1.4K Internet Development
- 2.2K JavaScript
- 37 JQuery
- 309 WEB Servers
- 157 WEB-Services / SOAP

chick80
Member Posts: **349**

in 3D Graphics

I'm implementing my own 3d vector class.

I have a rotate method like this:

[code]

//Rotates the vector around the origin and by the selected angles (in radians)

void CVector3D::Rotate(double rotx, double roty, double rotz)

{

if(rotx)

{

y = (double)(y*cos(rotx) - z*sin(rotx));

z = (double)(y*sin(rotx) + z*cos(rotx));

}

if(roty)

{

x = (double)(x*cos(roty) + z*sin(roty));

z = (double)(- x*sin(roty) + z*cos(roty));

}

if(rotz)

{

x = (double)(x*cos(rotz) - y*sin(rotz));

y = (double)(x*sin(rotz) + y*cos(rotz));

}

}

[/code]

but it doesn't work...

Anybody can find the error???

And does anybody know if there's a function to rotate a D3DXVECTOR3 ???

Thank you.

nICO

[hr]

[italic]How beautiful, if sorrow had not made Sorrow more beautiful than Beauty itself.[/italic]

JOHN KEATS

I have a rotate method like this:

[code]

//Rotates the vector around the origin and by the selected angles (in radians)

void CVector3D::Rotate(double rotx, double roty, double rotz)

{

if(rotx)

{

y = (double)(y*cos(rotx) - z*sin(rotx));

z = (double)(y*sin(rotx) + z*cos(rotx));

}

if(roty)

{

x = (double)(x*cos(roty) + z*sin(roty));

z = (double)(- x*sin(roty) + z*cos(roty));

}

if(rotz)

{

x = (double)(x*cos(rotz) - y*sin(rotz));

y = (double)(x*sin(rotz) + y*cos(rotz));

}

}

[/code]

but it doesn't work...

Anybody can find the error???

And does anybody know if there's a function to rotate a D3DXVECTOR3 ???

Thank you.

nICO

[hr]

[italic]How beautiful, if sorrow had not made Sorrow more beautiful than Beauty itself.[/italic]

JOHN KEATS

Terms of use / Privacy statement / Publisher: Lars Hagelin

Programmers Heaven articles / Programmers Heaven files / Programmers Heaven uploaded content / Programmers Heaven C Sharp ebook / Operated by CommunityHeaven

© 1997-2017 Programmersheaven.com - All rights reserved.

## Comments

349Doing this:

[code]

if(rotx)

{

y = (double)(y*cos(rotx) - z*sin(rotx));

z = (double)(y*sin(rotx) + z*cos(rotx));

}

[/code]

I change the value of y and then use the new value to update z... (the same for the other axis).

I just needed to store the result in another variable!

bye

nICO

[hr]

[italic]How beautiful, if sorrow had not made Sorrow more beautiful than Beauty itself.[/italic]

JOHN KEATS

1,035✭-[italic][b][red]S[/red][purple]e[/purple][blue]p[/blue][green]h[/green][red]i[/red][purple]r[/purple][blue]o[/blue][green]t[/green][red]h[/red][/b][/italic]

349:

: -[italic][b][red]S[/red][purple]e[/purple][blue]p[/blue][green]h[/green][red]i[/red][purple]r[/purple][blue]o[/blue][green]t[/green][red]h[/red][/b][/italic]

:

:

This is the function I wrote that works.

[code]

void CVector3D::Rotate(double rotx, double roty, double rotz)

{

CVector3D result(x, y, z);

if (rotx)

{

result.y += (double)(y*cos(rotx) - z*sin(rotx));

result.z += (double)(y*sin(rotx) + z*cos(rotx));

}

if (roty)

{

result.x += (double)(x*cos(roty) + z*sin(roty));

result.z += (double)(- x*sin(roty) + z*cos(roty));

}

if (rotz)

{

result.x += (double)(x*cos(rotz) - y*sin(rotz));

result.y += (double)(x*sin(rotz) + y*cos(rotz));

}

*this = result;

}

[/code]

btw, I've now abandoned this class, because I found that using matrices and D3DVECTOR saves a lot of time; you can try using D3DX functions for matrices, that are very useful and are optimized.

nICO

[hr]

[italic]How beautiful, if sorrow had not made Sorrow more beautiful than Beauty itself.[/italic]

JOHN KEATS

1,035✭-[italic][b][red]S[/red][purple]e[/purple][blue]p[/blue][green]h[/green][red]i[/red][purple]r[/purple][blue]o[/blue][green]t[/green][red]h[/red][/b][/italic]

349bye

nICO

[hr]

[italic]How beautiful, if sorrow had not made Sorrow more beautiful than Beauty itself.[/italic]

JOHN KEATS