webForumDet fria alternativet

Matte

Programmeringur Programmering - Övrigt

29 svar · 801 visningar · startad av Alpha II · sida 2 av 2

Frågan, av Alpha II

Vad betyder \|\| i en formel? i en formel för "collision detection" såg jag detta: \|\|Q\|\|C\|\| och det var ett litet sträck ovanför Q:et och C:et.

Läs frågan i sin helhet →
Medlem sedan juni 200010 432 inlägg
#21

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

Medlem sedan maj 20002 993 inlägg
#22

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

Medlem sedan juni 200010 432 inlägg
#23

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.

Medlem sedan maj 20002 993 inlägg
#24

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

Medlem sedan juni 200010 432 inlägg
#25

Bra att det löste sig :)

Medlem sedan maj 20002 993 inlägg
#26

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

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

Medlem sedan feb. 20016 388 inlägg
#27

Det är ett vanligt multiplikationstecken.

Medlem sedan maj 20002 993 inlägg
#28

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".

Medlem sedan juli 2002581 inlägg
#29

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.

Medlem sedan maj 20002 993 inlägg
#30

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;
142 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)