# Calculating dr/dtheta at an arbitrary point and angle

1. Jul 29, 2009

### haytil

In writing a computer raytracing simulation using polar coordinates, I've come across a simple problem: I need to calculate the value of dr/dΘ at an arbitrary point (in polar coordinates), pointing in an arbitrary direction (given as an angle).

So if point 1 (p1) is given by the coordinates (r1, Θ1), and I create a ray from that point, pointing at an angle Θ2 with respect to p1 (not with with respect to the origin), I need to know the value of dr/dΘ along that ray at that starting point.

Of course, Cartesian coordinates is much simpler: dx/dy as a function of Θ2 does not depend on the values of x and y at the point you're trying to calculate from. In polar coordinates, however, given an arbirtrary value Θ2, dr/dΘ will change depending on what the value of r is at the point you're trying to calculate from. Beyond that, however, I do not know the explicit formula that I need. So my current algorithm/equation relies on converting to cartesian coordinates and then doing the calculation.

It is as follows:

-----------------------------------
dx = cos(Θ2)
dy = sin(Θ2)

x1 = r1 * cos(Θ1)
y1 = r1 * sin(Θ1)

(This assumes dx << x1 and dy << y1. If not, dx and dy are divided by a large constant)

rT = sqrt( (x1+dx)^2 + (y1+dy)^2 )
ΘT = arctan( (y1 + dy) / (x1 + dx) )

Add 2pi or pi to thetaT as necessary (depending on which quadrant the point p1 is in)

dr = rT - r1
dΘ = ΘT - Θ1

dr/dΘ = (rT - r1) / (ΘT - Θ1)
-----------------------------------

This algorithm is undesirable both because it is inelegant (in its roundabout way of first converting to cartesian coordinates to do the calculation) and slow to run on the machine (trig functions and square roots, when unnecessary, slow things down a great deal, and I'm having many problems with computer-related precision limits which can likely be avoided with a more straightforward algorithm).

I'm sure there's a much simpler solution, involving only polar coordinates, and I'm frustrated that such a seemingly simple problem is stumping me. Can anyone help out?

Last edited: Jul 29, 2009
2. Jul 30, 2009

### HallsofIvy

I don't understand what you mean by "pointing in some arbitrary direction". If r is a function of $\theta$, then its derivative at any point is a single number, not a vector, and does not "point" in any direction. In order to have a different derivative in different directions, you would have to have a function of at least two variables, say f(r,$\theta$), not r($\theta$).

3. Jul 30, 2009

### haytil

I'm sorry, I'm not being very clear. The scenario I'm trying to handle is quite simple, I'm just not explaining it right. Let me try again:

Imagine a straight line that passes through the point (r1, Θ1) and that the slope of the line at that point is sin(ΘT)/cos(ΘT).

What is the value of dr/dΘ of the line at that point? (In terms of r1, Θ1, and ΘT)

4. Aug 1, 2009

### HallsofIvy

Your question still doesn't make sense. What is "T"? The slope of a straight line is a constant and so T should not be a variable. Or do you mean $\Theta T$ as "$\Theta_T$, a constant? If that is the case then the line, in xy-coordinates (since the slope of a line is defined in terms of xy- coordinates), is given by
$$x= \left(\frac{cos(\Theta_T)}{sin(\Theta_T)}\right)s+ r_1cos(\theta_1)$$
$$y= \left(\frac{cos(\Theta_T)}{sin(\Theta_T)}\right)s+ r_1sin(\theta_1)$$
and, since $x= r cos(\theta)$, $y= r sin(\theta)$,
$$r cos(\theta)= \left(\frac{cos(\Theta_T)}{sin(\Theta_T)}s+ r_1cos(\theta_1)$$
$$r sin(\theta)= \left(\frac{cos(\Theta_T)}{sin(\Theta_T)}s+ r_1sin()\theta_1)$$
we have, by squaring and adding,
$$r^2= \left(\left(\frac{cos(\Theta_T)}{sin(\Theta_T)}\right)s+ r_1cos(\theta_1)\right)^2+ \left(\left(\frac{cos(\Theta_T)}{sin(\Theta_T)}\right)s+ r_1sin(\theta_1)\right)^2$$
or
$$r= \sqrt{\left(\left(\frac{cos(\Theta_T)}{sin(\Theta_T)}\right)s+ r_1cos(\theta_1)\right)^2+ \left(\left(\frac{cos(\Theta_T)}{sin(\Theta_T)}\right)s+ r_1sin(\theta_1)\right)^2}$$
Dividng the second equation by the first
$$tan(\theta)= \frac{sin(\theta)}{cos(\theta)}= \frac{\left(\frac{cos(\Theta_T)}{sin(\Theta_T)}s+ r_1sin()\theta_1)\right)}{\left(\frac{cos(\Theta_T)}{sin(\Theta_T)}s+ r_1cos(\theta_1)\right)}$$