trigonometri i samband med objekt som rör sig

1 view
Skip to first unread message

Chris

unread,
Jan 19, 2011, 5:41:11 AM1/19/11
to Sweden iPhone Development
Hej igen...

har mycket problem här hehe...

jag har även hållit på att försöka skapa en arkanoid klon men istället
för de vanliga collision metoderna så försökte jag använda mig av
trigonometri.

Mitt problem är att bollen går bar ai en rak linje.

jag vet att problemet ligger i radianer delen men vet inte hur jag ska
göra om det... har någon något bra förslag?

#import "MovingObject.h" @implementation MovingObject @synthesize
bounds, position, direction, velocity; -(id) initWithBounds:
(CGRect) bounds andPosition: (CGPoint)position{ NSLog(@"Entering
initWithBounds: andPosition:"); return self; } //updating the
balls position -(void)update{ double radianer = direction * (M_PI/
180); NSLog(@"direction %f", direction); NSLog(@"radianer
%f", radianer); position.x += velocity * cos(radianer);
position.y += velocity * sin(radianer); NSLog(@"position x: %f,
y: %f", position.x, position.y); if(position.x> 320.0)
{ direction = ((radianer)*(180/M_PI)); NSLog(@"Hit
right"); NSLog(@"new direction: %f", direction);
NSLog(@"position x > 320.0: %f", position.x); } else
if(position.x < 0.0) { //direction = ((-radianer)*(180.0/
M_PI)); NSLog(@"Hit left"); NSLog(@"new direction:
%f", direction); NSLog(@"position x < 0.0: %f",
position.x); } if(position.y > 460.0) { direction = (-
radianer)*(180.0/M_PI); NSLog(@"Hit bottom");
NSLog(@"new direction: %f", direction); NSLog(@"position y >
460.0: %f", position.y); } else if(position.y< 0.0)
{ direction = ((-radianer)*(180/M_PI)); NSLog(@"Hit
top"); NSLog(@"new direction: %f", direction);
NSLog(@"position y < 0.0: %f", position.y); }
NSLog(@"Updating position x: %f, y:%f", position.x, position.y); }
@end

Mikael Hallendal

unread,
Jan 19, 2011, 7:03:49 AM1/19/11
to iphone...@googlegroups.com
Hejsan,

Iallafall här blev den koden väldigt oläslig. Du kan prova att paste'a den på t ex Pastie (http://pastie.org/) eller Gist (https://gist.github.com/) så blir det lättare för andra att läsa den.

Mvh,
Micke

Chris

unread,
Jan 19, 2011, 7:24:49 AM1/19/11
to Sweden iPhone Development
det funkade itne... fick bli manuell redigering istället :) tack ändå
för tipset... får använda mig av de nästa gång istället :)

Chris

unread,
Jan 30, 2011, 2:29:16 PM1/30/11
to Sweden iPhone Development
Ingen som kan?

Per-Olov Jernberg

unread,
Jan 30, 2011, 3:38:29 PM1/30/11
to iphone...@googlegroups.com
Jag skulle rekommendera att du ha en velocityvektor istället för
hastighet och riktning, blir mycket enklare att förstå, plus att det
passar ganska bra till arkanoid :)

varje frame så uppdaterar du position så här:
position.x += velocity.x;
position.y += velocity.y;

vid kollision och du vill ha studs mot en vägg till höger t.ex så:
velocity.x = -abs(velocity.x); medans du inte rör velocity.y ..

sen är det ju bara att skapa bra startvärden för när den lämnar
startplattan, t.ex så här:

riktning = -135 + (rand()%90); // (0 = rakt till höger, -90 rakt uppåt)
velocity.x = cos(riktning * M_PI / 180);
velocity.y = sin(riktning * M_PI / 180);

vill du få ut riktning från velocity kan du ju bara köra:

riktning =180 / M_PI * atan2( velocity.y, velocity.x );


2011/1/30 Chris <ser...@hotmail.com>:

Daniel Brandt

unread,
Jan 30, 2011, 4:28:08 PM1/30/11
to iphone...@googlegroups.com
2011/1/30 Chris <ser...@hotmail.com>:
> Ingen som kan?

Laddad fråga.

Jag kan fullt tillräckligt om detta, men som alla andra på listan har
jag också egna problem att lösa som inte är fullt lika som rudimentära
som geometriska beräkningar för en breakout-klon.

Jag är medveten om att det är ett lite syrligt svar, men antagandet
att andra på listan bara sitter och väntar på att lösa andras problem
utan att göra någon större insats att lösa problemet på egen hand och
med resurserna som står att finna via internet är rätt stötande den
också.

// Daniel

Chris

unread,
Jan 31, 2011, 2:24:06 AM1/31/11
to Sweden iPhone Development
Jag förstår dig och håller med till hundra procent.

Jag skulle inte ha ställt den frågan om jag inte testat själv först...

..jag började med detta och de andra sakerna jag frågat om i detta
forum i slutet av oktober.

De ingick nämligen i en kurs som jag gick då och har inte kunnat hitta
någon information på varken stackaflow eller på iphone developer
sidan.

Jag har även googlat på problemet men ej hittat nåt.

Jag vet att det finns andra metoder att lösa det här på men det var
just med trigonometri som vi skulle lösa problemet med.

så jag uppskattar all hjälp jag kan få :)

Chris

unread,
Jan 31, 2011, 2:55:05 AM1/31/11
to Sweden iPhone Development
Hej per-Olov!

Tack för tipset!

Anledningen till att hastighet och riktning ingick i min kod beror på
att själva uppgiften, som rörelse problemet ingick i, skulle lösas med
hjälp av trigonometri.. Det var en uppgift i en kurs jag gick på i
höstas ..

mvh

Chris
> >> @end- Dölj citerad text -
>
> - Visa citerad text -

Chris

unread,
Jan 31, 2011, 2:55:49 AM1/31/11
to Sweden iPhone Development
jag ska testa ditt tips också :)
> > - Visa citerad text -- Dölj citerad text -
Reply all
Reply to author
Forward
0 new messages