---
title: "Matte"
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/68328-matte/page2"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "Alpha II"
published: "2003-02-14T16:26:28.000Z"
updated: "2003-02-16T20:44:31.000Z"
replies: 29
views: 840
page: 2
pages: 2
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/68328-matte"
---

# Matte

_Sida 2 av 2._

## #21 — PeW, 2003-02-15T08:35Z

"Accessviolation" betyder troligen att du skriver på minne som du inte får skriva på.

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

## #22 — Alpha II, 2003-02-15T11:21Z

Jag vet. det konstiga är att jag får det på raden då jag skapar ett objekt!

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

## #23 — PeW, 2003-02-15T13:04Z

Men det är ju då du skriver på minnet ;)

Vet inte vilket språk du talar om, men i exempelvis C och C++ kan du låta en pekare peka på vad som helst (även minnesplatser som är förbjudna) utan att få ett felmeddelande. Men sen när man försöker accessa minnet blir det då fel, om pekandet är på otillåten plats, vilket i sig är bra då man antagligen missat nåt i koden. Det är vid såna fel man använder kompisen debuggern.

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

## #24 — Alpha II, 2003-02-15T14:18Z

Kom på felet.
Hade skrivit lite fel på ett ställe och skapade en class på fel sätt.

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

## #25 — PeW, 2003-02-15T14:46Z

Bra att det löste sig :)

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

## #26 — Alpha II, 2003-02-15T19:47Z

<http://home.tnv.mh.se/per-edstrom/interaktiv_matematik/2d/vinkel_mellan_vektorer.gif>

Vad är det lilla tecknet mellan \|**u**\| och \|**v**\|

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

## #27 — hypatia, 2003-02-15T21:31Z

Det är ett vanligt multiplikationstecken.

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

## #28 — Alpha II, 2003-02-16T13:12Z

Jag försöker räkna ut vinkeln mellan 2 vektorer enligt <http://home.tnv.mh.se/per-edstrom/interaktiv_matematik/2d/vinkel_mellan_vektorer.html>

koden:

 g := arccos(dot(ss.v,n)/(Magnitude(ss.v)\*Magnitude(n)));

**ss.v** är en rörelse vektor och **n** är.. humm en annan vektor :)

Problemet är att jag får EInvalidOp "Invalid floating operation".

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

## #29 — Sang-drax, 2003-02-16T15:54Z

Men det verkar rätt, vinklar beräknas på följande sätt:

```
u = (1,2,5)
v = (4,1,5)

vinkel = arccos( (u*v) / (|u|*|v|) )

print "Vinkeln är" + vinkel
```

Kontrollera att ingen vinkel == 0.

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

## #30 — Alpha II, 2003-02-16T20:44Z

Så här ser hela koden ut, den kontrollerar om rymdskeppet (ss) träffar en asteroid och isf vilken ny riktining den får. Har iof en färdig kode för detta som inte fungera så här alls, men det är roligare att göra något själv, dock fungerar det ju inte :(

```
  TAsteroid = record
    dead: boolean;
    x: integer;
    y: integer;
    r: integer;
  end;

  TSpaceshuttle = record
    x: double;  // x pos
    y: double;  // y pos
    r: integer;  // radie
    a: integer;  // angle (spaceship rotation)
    v: Tvector2;  // vellocity
    m: double;  // mass
  end;
```

```
procedure Move();
var
  i :integer;
  collision:boolean;
  dXSqr: double;
  dySqr: double;
  RadiiSqr: double;
  q:double;
  N: TVector2;
  g: double;
  u: double;
begin

  for I := 0 to 9 do
  begin
    dXSqr := sqr(Asteroid[i].x-ss.x);
    dYSqr := sqr(Asteroid[i].y-ss.y);
    RadiiSqr := sqr(Asteroid[i].r+ss.r);

    // Collision!
    if (dXSqr+dYSqr < RadiiSqr) then
    begin
      q := arctan((ss.x-Asteroid[i].x)/(ss.y-Asteroid[i].y));  // vinkeln normalen ska peka åt
      n.x := cos(i);  // i x kordinater
      n.y := sin(i);  // i y kordinater
      g := arccos(dot(ss.v,n)/(Magnitude(ss.v)*Magnitude(n))); // få vinkeln mellan normalen och rörelse vektorn
      // FÅR FEL HÄR

      u := q-g; // den nya vinkeln i grader eller radianre... vi får se...
      ss.v.x := cos(u);
      ss.v.y := sin(u);
    end;

  end;

  // max speed = 25
  if magnitude(ss.v) > 25 then
  begin
    ss.v := Normalize(ss.v);
    ss.v.x := ss.v.X * 25;
    ss.v.y := ss.v.y * 25;
  end;

  // slow down...
  ss.v.x := ss.v.x * 0.99;
  ss.v.y := ss.v.y * 0.99;

  // move it!
  ss.x := ss.x + ss.v.x;
  ss.y := ss.y + ss.v.y;

end;
```

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

---

Tråden på webben: https://www.webforum.nu/amne/programmering/68328-matte/page2  
Föregående sida: https://www.webforum.nu/amne/programmering/68328-matte.md
