---
title: "cos o sin. flytta en bil"
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/53087-cos-o-sin-flytta-en-bil"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "Alpha II"
published: "2002-09-12T20:01:03.000Z"
updated: "2002-09-20T18:26:34.000Z"
replies: 17
views: 477
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/53087-cos-o-sin-flytta-en-bil"
---

# cos o sin. flytta en bil

## #1 — Alpha II, 2002-09-12T20:01Z

Hej!
Jag förstår inte riktigt funktionerna cos och sin.
I ett 2d spel jag tidigare gjort fungerade det att skriva:

```
player.xpos := player.xpos + sin(player.angle);
player.ypos := player.ypos + cos(player.angle);
```

För att få ut den nya positionen av spriten.

Nu försöker jag göra ett 3d bilspel i opengl. Av någon anledning fungerar inte samma kod som fungerade i 2d spelet. Bilen flyttas åt alla möjliga konstiga håll. Och nästan aldrig åt hållet den står riktad mot.

Hur ska jag göra?  :q

Permalänk: https://www.webforum.nu/p/53087

## #2 — PeW, 2002-09-12T20:18Z

Är ingen guru på OpenGl... men eftersom det är 3D du snackar om så kanske det kan tänkas att du måste ta med **Z** och inte bara x och y?

Permalänk: https://www.webforum.nu/p/781825

## #3 — Alpha II, 2002-09-12T20:39Z

jo men det har jag gjort. det är x och z positionerna jag ändrar.

Permalänk: https://www.webforum.nu/p/781854

## #4 — kristoffer, 2002-09-12T20:41Z

Jag tycker det ser ut som att det är x- och y-positionerna du ändrar?

Permalänk: https://www.webforum.nu/p/781858

## #5 — UlfT, 2002-09-12T21:47Z

Kan inte heller något om OpenGL, men jag fick en tanke om att det kanske är något skumt med vinklarna. Är du säker på att du använder vinkeln mot en axel i xy-planet? I en 3D-värld kan du ju även ha vinklar jämfört med xy-planet (alltså snett uppåt).

Permalänk: https://www.webforum.nu/p/781933

## #6 — Alpha II, 2002-09-13T15:54Z

Min kod:

```
procedure glDrawScene();
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();

  gluLookAt(0.0, 5.0, 20.0,
            0.0, 0.0, 0.0,
            0.0, 1.0, 0.0);

  glBindTexture(GL_TEXTURE_2D, texture[0]);
  glBegin(GL_QUADS);
    glTexCoord2f(20.0, 0.0); glVertex3f(10.0, 0.0, -10.0);
    glTexCoord2f(0.0, 0.0); glVertex3f(-10.0, 0.0, -10.0);
    glTexCoord2f(0.0, 20.0); glVertex3f(-10.0, 0.0, 10.0);
    glTexCoord2f(20.0, 20.0); glVertex3f(10.0, 0.0, 10.0);
  glEnd();

  glBindTexture(GL_TEXTURE_2D, texture[1]);
  glTranslatef(player.xpos, 0.2, player.zpos);
  glRotatef(Player.angle, 0.0, 1.0, 0.0);
  Car.Draw;
end;
```

Och i loopen

```
            glDrawScene();
            SwapBuffers(h_DC);

            if keys[VK_LEFT] then Player.angle := Player.angle + 1.0;
            if keys[VK_RIGHT] then Player.angle := Player.angle - 1.0;
            if keys[VK_UP] then begin
              player.xpos := player.xpos + sin(player.angle)/10;
              player.zpos := player.zpos + cos(player.angle)/10;
            end;
            if keys[VK_DOWN] then begin
              player.xpos := player.xpos - sin(player.angle)/10;
              player.zpos := player.zpos - cos(player.angle)/10;
            end;
```

Permalänk: https://www.webforum.nu/p/785205

## #7 — Fridolf, 2002-09-19T16:34Z

Vad är "angle" i ditt program? Vad jag kan förstå så är det samma vinkel som i 2D-spelet, dvs höjdled ingår inte. Rätta mig om jag har fel. Det betyder i så fall att koden ska se ut precis som den gjorde innan, dvs x och y ska ändras men inte z som du har gjort.

Permalänk: https://www.webforum.nu/p/789509

## #8 — Sang-drax, 2002-09-19T17:13Z

För 3D-programmering underlättar det starkt att läsa Linjär algebra på Universitetet eller läsa Matte F + Matte G på gymnasiet.

Permalänk: https://www.webforum.nu/p/789568

## #9 — Alpha II, 2002-09-19T18:44Z

Um... jag går i 9an ;)
Ingen som vet hur fan man räknar ut vart bilen kommer att flyttas med sin och cos? Kom på att jag använde cos256 och sin256 i mitt 2D spel... det var några special funktioner som följde med DelphiX, Men det borde väl gå att räkna ut det genom att använda samma formel som i en analog klock, fast man ändrar från 60 möjliga positioner till 360? :q

Permalänk: https://www.webforum.nu/p/789646

## #10 — Alpha II, 2002-09-19T18:46Z

Någon som vet hur man räknar ut positionerna i en analog klocka? jobbigt att söka eftersom man får mest svar om hur man gör det i javascript med google :p

Permalänk: https://www.webforum.nu/p/789648

## #11 — MinOrk, 2002-09-20T06:30Z

På <http://nehe.gamedev.net/> finns det tutorials skrivna i C++, men oftast portade till flera andra språk/utvecklingsmiljöer. Däribland delphi.

Permalänk: https://www.webforum.nu/p/789843

## #12 — Alpha II, 2002-09-20T13:31Z

Det vet jag... brukar surfa där ganska ofta. men jag hittar inget där om just det här :(

Permalänk: https://www.webforum.nu/p/793039

## #13 — UlfT, 2002-09-20T13:42Z

> **Alpha II skrev:**
>
> Någon som vet hur man räknar ut positionerna i en analog klocka? jobbigt att söka eftersom man får mest svar om hur man gör det i javascript med google :p

Vad har analoga klockor med saken att göra?

Om det är enheten på vinkeln du är ute efter, då är frågan snarare om du har grader eller radianer. Det troliga är att sin och cos jobbar med radianer. I så fall får du relativt stora vridningar på din bil varje gång du trycker ner en piltangent (och därmed vrider bilen 1 radian). Du kanske skulle skala ner de vridningar av bilen som görs.

Permalänk: https://www.webforum.nu/p/793045

## #14 — Alpha II, 2002-09-20T13:50Z

Jaså, men hur gör jag det?
Anledningen till att jag tänkte på en analogklocka är ju att i en sån finns det ju 60 olika positioner pekarna kan vara på, tänkte om man kunde modifiera det till 360.... :OO

Permalänk: https://www.webforum.nu/p/793049

## #15 — UlfT, 2002-09-20T14:47Z

> **Alpha II skrev:**
>
> Jaså, men hur gör jag det?

För att skala ner vinklarna, menar du? Om du vill veta hur stora vinklar du rör dig med, då gäller följande grundförutsättningar:

Ett varv =

- 360 grader
- 2\*pi eller med andra ord ca 6,28 radianer.

När du ökade/minskade din vinkel med 1,0, då svängde du alltså bilen nästan 60 grader. Om du vill konvertera en vinkel i grader till samma i radianer, då får du räkna ut:

```
vinkelRadianer = vinkelGrader*6,28/360
```

Sedan kan du räkna med radianvinkeln i dina formler.

Permalänk: https://www.webforum.nu/p/793074

## #16 — Alpha II, 2002-09-20T17:53Z

Coolt, det ska jag testa :) Det var nått sånt jag ville åstakomma :)

Vad är radianer??

Permalänk: https://www.webforum.nu/p/793207

## #17 — UlfT, 2002-09-20T18:03Z

> **Alpha II skrev:**
>
> Vad är radianer??

Det är ett speciellt vinkelmått som brukar användas mer eller mindre standardmässigt i alla sin- cos- och tan-funktioner. Du har 2\*pi (ung. 6,28) radianer på ett varv. Måttet kan härledas till den så kallade enhetscirkeln. En enhetscirkel är en cirkel med radie=1. Utgår du från exakt samma längdenhet som när du mätte radien, kommer omkretsen på denna enhetscirkel vara 2\*pi, dvs ungefär 6,28. Som du ser så är radian-vinkeln direkt kopplad till cirkelns egna mått. Skulle du utgå från grader (360 på ett varv), då skulle du behöva konvertera den där omkretsen för att få det rätt. Radianer skulle du alltså kunna betrakta som "det naturliga vinkelmåttet". Det är därför radianer används i så hög utsträckning.

Permalänk: https://www.webforum.nu/p/793215

## #18 — Alpha II, 2002-09-20T18:26Z

Yahoo! Det fungerade perfect :D
Tack UlfT!

Nu behöver jag nån kod så att kameran alltid följer  bilen \*svårt\*

Permalänk: https://www.webforum.nu/p/793233

---

Tråden på webben: https://www.webforum.nu/amne/programmering/53087-cos-o-sin-flytta-en-bil
