Given my position as (x, y). I wish to calculate the xcor (the x coordinate) for a point whose ycor (the y coordinate)I know. The direction is theta (an angle with the vertical).
xcor = x0 + t * Sin(Theta)
ycor = y0 + t * Cos(Theta)
find t from 2nd equation and use it in 1st equation
(note Cos/Sin exchange, because you mentioned theta as an angle with the vertical
Related
#Problem
Hey I wondered how we can find the intersection between a point with a vector direction, assuming that the point is in the circle.
In Other words, how can I find where the particle will hit the circle circumference when I know the following: Circle position, radius, Particle Position and direction (velocity).
#Implementation
I am currently creating a flight radar, all flights are stored in a Queue and I need to sort the queue based on the time untill the flight leaves the cirlce (Radar Radius)
So I need to return a Point, thus I can just get the distance and calculate the time based on distance and velocity.
At first subtract center cordinates to simplify calculations (now circle center is coordinate origin)
x11 = x1 - x0
y11 = y1 - y0
Point position against time is
x = x11 + vx * t
y = y11 + vy * t
where vx, vy are components of velocity
Point is at circumference when
x^2 + y^2 = R^2
so
(x11 + vx * t)^2 + (y11 + vy * t)^2 = R^2
(vx^2+vy^2)*t^2 + (2*vx*x11+2*vy*y11)*t + (x11^2+y11^2-R^2) = 0
This is quadratic equation for unknown t. Solve it, find roots - none for outside moving, one for single touch case, two roots for regular intersection - larger one is needed time of intersection t_int
Substitute t into point position equations and get coordinates:
x_int = x1 + t_int * vx
y_int = y1 + t_int * vy
As you can see on that picture i need to find _tPos vector position based on tPos vector relative to aPos Vector.
If you denote the length of the purple line as T, then the corresponding rotation angle phi can be calculated as
cos(phi) = 1 - T^2/(2R^2)
Now, you need to rotate the red point with coordinates x,y by phi clockwise. The coordinates of the rotated point are thus:
x' = cos(phi)*x + sin(phi)*y
y' = -sin(phi)*x + cos(phi)*y
Here, the value of sin(phi) can be expressed directly as:
sin(phi) = T/R * sqrt(1 - T^2/(4R^2))
It seems to be a very easy question but I just can't figure it out ...
as shown on the below graph:
Supposing we know :
Vector (X,Y)
Vector (X1,Y1)
Angle a
How can I get the vector (?,?) in Unity ?
Many Thanks in advance.
Subtract X1,Y1 from all coordinates.
XX = X - X1
YY = Y - Y1
Let (DX, DY) is vector between (XX, YY) and unknown point.
This vector is perpendicular to (XX, YY), so scalar product is zero.
And length of this vector is equal to length of (XX, YY) multiplied by tangent of angle.
So equation system is
DX * XX + DY * YY = 0
DX^2 + DY^2 = (XX^2 + YY^2) * Tan^2(Alpha)
Solve this system for unknowns (DX, DY) (there are two solutions in general case), then calculate unknown coordinates as (X + DX, Y + DY)
Not totally sure if there is a more efficient method to do this, but it will work.
First you need to find the magnitude of the distance vector between X,Y and X1,Y1. We will call this Dist1.
Dist1 = Vector2.Distance(new Vector2(X,Y), new Vector2(X1,Y1));
Using this distance, we can find the magnitude of the vector for the line going to X?,Y? which we will call DistQ.
DistQ = Dist1 / Mathf.Cos(a * Mathf.Deg2Rad);
You now need to find the angle of this line relative to the overall coordinate plane which will create a new triangle with X?Y? and the x-axis.
angle = Mathf.Atan2((Y - Y1), (X - X1)) * Mathf.Rad2Deg - a;
Now we can use more trig with the DistQ hypotenuse and this new angle to find the X?(XF) and Y?(YF) components relative to X1 and Y1, which we will add on to get the final vector components.
XF = DistQ * Mathf.Cos(angle * Mathf.Deg2Rad) + X1;
YF = DistQ * Mathf.Sin(angle * Mathf.Deg2Rad) + Y1;
So coming from a flash background I have an OK understanding of some simple 2D trig. In 2d with I circle, I know the math to place an item on the edge given an angle and a radius using.
x = cos(a) * r;
y = sin(a) * r;
Now if i have a point in 3d space, i know the radius of my sphere, i know the angle i want to position it around the z axis and the angle i want to position it around, say, the y axis. What is the math to find the x, y and z coordinates in my 3d space (assume that my origin is 0,0,0)? I would think i could borrow the Math from the circle trig but i can't seem to find a solution.
Your position in 3d is given by two angles (+ radius, which in your case is constant)
x = r * cos(s) * sin(t)
y = r * sin(s) * sin(t)
z = r * cos(t)
here, s is the angle around the z-axis, and t is the height angle, measured 'down' from the z-axis.
The picture below shows what the angles represent, s=theta in the range 0 to 2*PI in the xy-plane, and t=phi in the range 0 to PI.
The accepted answer did not seem to support negative x values (possibly I did something wrong), but just in case, using notation from ISO convention on coordinate systems defined in this Wikipedia entry, this system of equations should work:
import math
x = radius * sin(theta) * cos(phi)
y = radius * sin(theta) * sin(phi)
z = radius * cos(theta)
radius = math.sqrt(math.pow(x, 2) + math.pow(y, 2) + math.pow(z, 2))
phi = math.atan2(y, x)
theta = math.acos((z / radius))
how do i find out pixel value at certain degree on the circumference of a circle if I know the pixel co-ordinates of the center of the circle, radius of the circle ,and perpendicular angle.
Basically, I am trying to draw the hands of a clock at various times ( 1 o clock , 2 o clock etc )
Let h be the hour as a floating point number (h=2.25 would be 02:15, etc.) between 0 and 12. (cX,cY) are the coordinates of the center. hLength and mLength are the lengths of the hour and min hands.
// Hour hand
hAngle = 2.0*Pi*h/12.0; // 0..12 mapped to 0..2*Pi
hX = cX + hLength * sin(hAngle);
hY = cY - hLength * cos(hAngle);
// Min hand
mAngle = 2.0*Pi*h; // 0..1 mapped to 0..2*Pi, etc.
mX = cX + mLength * sin(mAngle);
mY = cY - mLength * cos(mAngle);
Where the centre of the circle is (X0, Y0), the radius is R and the angle with the x-axis is theta:
X1 = (R * cos theta) + X0
and
Y1 = (R * sin theta) + Y0
If (x1,y1) is a point on the circumference and (x,y) is the center, then x1 = x + r * cos(angle) and y1 = y + r * sin(angle)
if center is at x0, y0, and 0,0 iz at bottom-left corner, then 1 o'clock is at x0 + rsin(2π/3), y0+rcos(2π/3).
Draw lines from the center to coordinates computed with sin for the y coordinates and cos for the x coordinates (both multiplied by the length of the hand).
Wikipedia has more information on how sin and cos "work".