Hej, Med risk f;r att jag säger nåt dumt nu (3d geo är inte min starkaste sida..) Mjo, Jag lägger ju rotation.x i radianer (alla funktioner i C# tar bara emot radianer), utdatan är då x koordinaten på en cirkel om radien är ett. Om rotations.x är 0 blir ju xRot 90 (X: ? Y: 4 Z: 0), vilket är rätt, är rotations.x 90, blir xRot 0 vilket är rätt (X: ? Y: 0 Z: 4), Och allt där mellan borde stämma.Problem med polar ekvationen
Jag behöver lite hjälp med polar ekvationen, Egentligen skulle jag nog kunna skriva det här i C# eller DirectX, men eftersom problemet jag har är matematiskt och jag antar att de flesta kan uttyda C#, Tycker jag detta forumet passar bäst.
Jag har ett flygplan, vilket jag roterar o flyttar runt med hjälp av polar funktionen, Detta är alltså i MDX. Jag vill att kameran och positionen där kameran tittar på ska vara lite ovanför planet. Om planet står på positionerna X: 0 Y: 0 Z: 0 och inte är roterat skulle alltså positionen där kameran tittar vara X: 0 Y: 4 Z: 0 och kamerans position X: 0 Y: 4 Z: 15. Roterar man dock planet i X axlen 90 grader ska där kameran tittar vara X:0 Y: 0 Z: 4 och kamerans position vara X: 0 Y: 15 Z: 4.
Denna bilden förklarar rätt bra hur jag tänker <http://i115.photobucket.com/albums/n282/Friskar/explain.jpg>. trianglen är då mitt skepp, den röda rektanglen är kamerans "titta på" position och den gröna är kamerans position.
Detta fungerar dock inte som det ska. Jag vill att de ska se ut såhär alltid: <http://i115.photobucket.com/albums/n282/Friskar/WayIwanit.jpg> (på bilden har jag inte roterat i X axlen. När jag roterar i X axlen uppåt blir det <http://i115.photobucket.com/albums/n282/Friskar/.jpg>, planet kommer lite närmare en (kolla noga så ser du det). Roterar jag dock neråt i X axlen blir det <http://i115.photobucket.com/albums/n282/Friskar/-1.jpg>. Jag kan inventera Z axlen för att få det se lite bättre ut, men då blir det lite konstigt när jag roterar i Y axlen.
Här är koden:
float xRot = rotations.x, yRot = rotations.y; // Sätter in de aktuella rotationerna i temp värden
/* Räknar ut en relativ 90 graders vinkel till X axlen. Som man såg på bilden med trianglen så
måste man först dra upp x rotationen 90 grader sen dra tillbaka den för att ge både "titta på" positionen
och kamerans position rätt uträkning */
xRot = Convert.ToSingle(Math.Cos(Geometry.DegreeToRadian(rotations.x)) * 90);
cam.LookAt = Position; // Sätter kamerans "titta på" till samma position som planet.
cam.xRotation = xRot; // Sätter kamerans rotation till beräkningarna till samma som mina temp värden
cam.yRotation = yRot;
cam.SetLookAt(4); // Räknar ut var "titta på" positionena ska vara, med den relativa 90 graders vinklen,
if (cam.LookAt.Z > 0 && rotations.x < 0)
{
// cam.LookAt.Z = -Math.Abs(cam.LookAt.Z); kan inventera här om jag vill
}
cam.xRotation = rotations.x; // Ändrar tillbaka x axlen till det riktiga värdet
cam.Position = cam.LookAt; // Sätter kamerans position till samma som vad den tittar på
cam.Move(15); // flyttar tillbaka kameran femton enheter ifrån kamerans "titt position"
cam.SetCamera(); // utför ändringarna
cam.SetLookAt och cam.Move funktionerna nedan
public void Move(float distance)
{
Vector3 Addvector = new Vector3();
Addvector.Z += Convert.ToSingle(Math.Cos(Geometry.DegreeToRadian(yrotation)) * Math.Cos(Geometry.DegreeToRadian(xrotation)));
Addvector.X += Convert.ToSingle(Math.Sin(Geometry.DegreeToRadian(yrotation)) * Math.Cos(Geometry.DegreeToRadian(xrotation)));
Addvector.Y -= Convert.ToSingle(Math.Sin(Geometry.DegreeToRadian(xrotation)));
Position += Addvector * distance;
}
public void SetLookAt(float distance)
{
Vector3 Addvector = new Vector3();
Addvector.Z += Convert.ToSingle(Math.Cos(Geometry.DegreeToRadian(yrotation)) * Math.Cos(Geometry.DegreeToRadian(xrotation)));
Addvector.X += Convert.ToSingle(Math.Sin(Geometry.DegreeToRadian(yrotation)) * Math.Cos(Geometry.DegreeToRadian(xrotation)));
Addvector.Y += Convert.ToSingle(Math.Sin(Geometry.DegreeToRadian(xrotation)));
LookAt += Addvector * distance;
}
Hur ska jag göra så avståndet till planet alltid är likadant?, Och så att planet ser likadant ut hur jag än roterar på det?.
Sv: Problem med polar ekvationen
Men fastnade med ögonen på följande:
xRot = Convert.ToSingle(Math.Cos(Geometry.DegreeToRadian(rotations.x)) * 90);
Du konverterar ena till radianer men sen har du det andra kvar i grader, ska det vara så?
Sv:Problem med polar ekvationen