Vector rotation

 0 I have 3 values which I want to represent on a bar graph like display. The catch is I want the bars to come out rotated around a central point, to form a triangular shape. The values are variable, but the total is limited. Something like this. The values are a, b and c, along vectors o-e, o-g, o-f. My issue is the math behind it. I can follow the formula easy enough, but have yet to figure out how to apply it correctly in this instance. I'm trying to place point a at the correct distance, then rotate it by 120 degrees(circle/3) to get my three vectors. However, they all shoot off at random angles. I assume my problem is a) Not getting the direction vectors correct and b) not extending along these correctly. I've looked at wolfram, even the wolfire blog linked in another answer, but can't wrap my head around where I'm going wrong. Relevant code attached. ``````var oPos : Vector2 = Vector2(5, 5); var oAng : Vector2; var currentAng : float = 0; var theta : float = 120.0; var aPos : Vector2; var aAng : Vector2; var aDist : int = 7; var bPos : Vector2; var bAng : Vector2; var bDist : int = 7; var cPos : Vector2; var cAng : Vector2; var cDist : int = 7; private var newAng : Vector2; private var newPos : Vector2; function Start() { oAng = Vector2(0, 0); aPos = oPos + Vector2(aDist, aDist); bPos = oPos + Vector2(bDist, bDist); bPos.x = (bPos.x * Mathf.Cos(theta)) - (bPos.y * Mathf.Sin(theta)); bPos.y = (bPos.x * Mathf.Sin(theta)) + (bPos.y * Mathf.Cos(theta)); cPos = oPos + Vector2(cDist, cDist); cPos.x = (cPos.x * Mathf.Cos(theta*2)) - (cPos.y * Mathf.Sin(theta*2)); cPos.y = (cPos.x * Mathf.Sin(theta*2)) + (cPos.y * Mathf.Cos(theta*2)); } `````` more ▼ asked Apr 24 '11 at 10:24 AM Chrisg 310 ● 5 ● 5 ● 10 add new comment (comments are locked) 10|3000 characters needed characters left ▼ Viewable by all users

 0 Unity has a convenient operator for rotating Vector's. ``````var distFromCenter : float; var firstPoint : Vector3 = Vector3.up; var secondPoint : Vector3 = Vector3.up; var thirdPoint : Vector3 = Vector3.up; var rotationAngle : float = 120.0; function Start() { var rotation : Quaternion = Quaternion.AngleAxis(rotationAngle, Vector3.forward); firstPoint *= rotation; firstPoint *= distFromCenter; secondPoint *= rotation; secondPoint *= distFromCenter; thirdPoint *= rotation; thirdPoint *= distFromCenter; } `````` more ▼ answered Apr 24 '11 at 11:59 AM Peter G 15.1k ● 16 ● 44 ● 137 Sorry it took so long to reply.The Point *= rotation; lines don't work, took me this long to get the google search right to find this thread: http://forum.unity3d.com/threads/36737-Vector3-rotationWorked once I changed "Point *= rot" to "Point = rot * Point".Otherwise perfect - ta muchly. Apr 28 '11 at 06:19 PM Chrisg add new comment (comments are locked) 10|3000 characters needed characters left ▼ Viewable by all users

By Email:

Topics:

x2174
x1041
x198
x45

asked: Apr 24 '11 at 10:24 AM

Seen: 3164 times

Last Updated: Apr 24 '11 at 10:24 AM