|
|
|
#1 |
|
Member
Join Date: Mar 2008
Posts: 82
|
Tricky trigonometry question
OK, This one really needs a diagram to explain so check the attached image I created.
(I need to find the lengths of the blue triangle). ![]() A car is sitting at a known point within the perimeter of a circle of a known radius. It travels in a straight line in a known direction for a known distance which happens to take it outside the circle. How do I calculate the coordinate for the point at which the car intersects the circle? Two more minor details... 1) The car does not necessarily begin at the center of the circle. 2) The direction the car takes does not necessarily radiate from the center either.
__________________
----------------------------------------------------------------------1 5-------------3-------------2-------------1-------------0-------------0 -------0-------------0-------------0-------------0-------------0------0 ----------------------------------------------------------------------0 3-------------2-------------0-------------0---------------------------2 --------------------------------------------------------3-------------3 Last edited by Trugas; 09-08-2009 at 10:24 PM. Reason: Better diagram |
|
|
|
|
|
#2 |
|
Senior Member
Join Date: Mar 2005
Location: Bosnia
Posts: 1,624
|
It doesn't matter where the car starts from. Wherever the car intercepts the circle, the distance between the car and the centre of the circle is the radius. To get the point of intersection all you then need is the angle between the centre of the circle and the car's position.
So, function for getting the angle between 2 points (in radians): Code:
function getAngle(x:Number, x2:Number, y:Number, y2:Number):Number {
return Math.atan2(y-y2, x-x2);
}
Code:
var a:Number = getAngle(car._x, circleCentreX, car._y, circleCentreY); var x:Number = Math.cos(a) * radius + circleCentreX; var y:Number = Math.sin(a) * radius + circleCentreY;
__________________
New sig soon |
|
|
|
|
|
#3 |
|
Senior Member
Join Date: Jul 2007
Location: Columbus, OH.
Posts: 461
|
Doesn't seem like the last reply really addressed the issue - don't think the OP really knows the position where the car intersects the circle. (IE doesn't know the values of car._x, car._y).
Denote vector quantities with []. You can solve the problem by writing the position of the car in parametric form: [C(t)] = [C0] + [Cdir]*t [C(t)] is cars position at time t. [C0] is cars position at t=0 (denoted x,y in your original figure) [Cdir] is a unit vector that points in the direction of the cars motion (denoted dx,dy in your figure, but you must normalize it) You are looking for the time at which the distance between the car and the center of the circle (denoted [b]) is R. Or equivalently, when the distance^2 is equal to R^2: dot( [C0]-[b]+[Cdir]t, [C0]-[b]+[Cdir]t) = R*R This is a quadratric equation in t. Solve for t using quadratic formula: t = (-b +/- sqrt(bb-4ac) ) / 2a where: a = 1 b = 2 * dot( [C0]-[b], [Cdir] ) c = dot([C0]-[b],[C0]-[b]) - R*R (ie the distance^2 between cars start and circles center, minus R*R) There will be two roots for t - pick the one that's positive. (The negative root indicates the time the car intersected the circle as it entered it in the past). Once you know t, you know the position [C(t)] at the time of intersection. You can plug those numbers into dudeqwerty's solution.
__________________
Completed games:Mind Maze (48 hour job), Puzzle Kaboom, Pinball Racers, Spice Hunters Ongoing Projects: Doom-a-like, Quake-a-like, updated Feb. 4 '09 About me: Homepage. |
|
|
|
|
|
#4 |
|
Senior Member
Join Date: May 2006
Location: Manhattan
Posts: 229
|
beat me! that was a fun one too, poopy.
|
|
|
|
|
|
#5 |
|
Senior Member
Join Date: Jul 2007
Location: Columbus, OH.
Posts: 461
|
Heh, a pack of math nerds on the prowl
Took 'er down like a limpy gazelle.
__________________
Completed games:Mind Maze (48 hour job), Puzzle Kaboom, Pinball Racers, Spice Hunters Ongoing Projects: Doom-a-like, Quake-a-like, updated Feb. 4 '09 About me: Homepage. |
|
|
|
|
|
#6 |
|
Member
Join Date: Mar 2008
Posts: 82
|
Lmao, you guys are freaks!
![]() Thankyou!! I've been struggling with this for days.
__________________
----------------------------------------------------------------------1 5-------------3-------------2-------------1-------------0-------------0 -------0-------------0-------------0-------------0-------------0------0 ----------------------------------------------------------------------0 3-------------2-------------0-------------0---------------------------2 --------------------------------------------------------3-------------3 |
|
|
|
|
|
#7 |
|
Member
Join Date: Mar 2008
Posts: 82
|
Okay fun's not over yet though. I was just considering if this can be done by using the rule of sines too? Here's what I mean...
![]() The dark gray triangle has two known sides and I think angle 'b' can be found too. So is that enough to find the third side of the triangle? If so then we can subtract that length from H and presto, blue triangle can be solved! So Pythagora for totalDist: PHP Code:
__________________
----------------------------------------------------------------------1 5-------------3-------------2-------------1-------------0-------------0 -------0-------------0-------------0-------------0-------------0------0 ----------------------------------------------------------------------0 3-------------2-------------0-------------0---------------------------2 --------------------------------------------------------3-------------3 |
|
|
|
|
|
#8 |
|
Member
Join Date: Mar 2008
Posts: 82
|
Would leave this to solve...
![]() Question 1) Is this way even possible or am I assuming too much? Question 2) Even if it does work would it just take longer to do it this way anyway?
__________________
----------------------------------------------------------------------1 5-------------3-------------2-------------1-------------0-------------0 -------0-------------0-------------0-------------0-------------0------0 ----------------------------------------------------------------------0 3-------------2-------------0-------------0---------------------------2 --------------------------------------------------------3-------------3 |
|
|
|
|
|
#9 |
|
Senior Member
Join Date: Jul 2007
Location: Columbus, OH.
Posts: 461
|
That might work, although it will have the same branch cut issue as the parametric solution. Recalling vaguely from geometry, SAS (side-angle-side) SSS and ASA all uniquely specify a triangle, but SSA does not. The figure you drew has this SSA arrangement and your triangle is not unique. I can make a second triangle with the same SSA - by picking the same other point, behind the car.
Not to say you couldn't tackle the problem going that way - always more than one way to get the job done. Wikipedia's article on the law of sines appears to have a special section on this, entitled "the ambiguous case".
__________________
Completed games:Mind Maze (48 hour job), Puzzle Kaboom, Pinball Racers, Spice Hunters Ongoing Projects: Doom-a-like, Quake-a-like, updated Feb. 4 '09 About me: Homepage. |
|
|
|
|
|
#10 | |
|
Senior Member
Join Date: Mar 2005
Location: Bosnia
Posts: 1,624
|
Seems to me the question was:
Quote:
Am I missing something?
__________________
New sig soon |
|
|
|
|
|
|
#11 |
|
Senior Member
Join Date: May 2006
Location: Manhattan
Posts: 229
|
@dudeqwerty: one of the OP's original conditions is that the car's direction does not necessarily radiate from the circle's center.
|
|
|
|
|
|
#12 |
|
Member
Join Date: Mar 2008
Posts: 82
|
rachil0: Thanks for all your info. Did some research on "the ambiguous case" and you're certainly right.
![]() dudeqwerty: Not sure I follow you. totalDist just gives the distance to the point outside the circle, which isn't what I'm chasing.
__________________
----------------------------------------------------------------------1 5-------------3-------------2-------------1-------------0-------------0 -------0-------------0-------------0-------------0-------------0------0 ----------------------------------------------------------------------0 3-------------2-------------0-------------0---------------------------2 --------------------------------------------------------3-------------3 |
|
|
|
![]() |
| Tags |
| angle, distance, radius, trig, trigonometry |
|
||||||
| Thread Tools | Search this Thread |
| Display Modes | |
|
|