|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
Distance timing out
I have a problem. Whenever I try to find distance between two points the robot controller times out due to the square root calculations. We have a coordinate system of approximately 768x1280 units. Do you think a lookup table would be too large?
|
|
#2
|
||||
|
||||
|
Re: Distance timing out
square root calculations are the worst
can you leave the number squared and work with it that way? |
|
#3
|
|||||
|
|||||
|
Re: Distance timing out
How about having it go to, say, 1 decimal point? with such a large system, you don't need it that precise. And the field is 24' by 48'.
|
|
#4
|
||||||
|
||||||
|
Re: Distance timing out
Yes, that would be to big for a standard lookup table. That would be almost a megabyte, if you only looked up a single byte. If you were doing it with floats, it would be even bigger.
|
|
#5
|
|||
|
|||
|
Re: Distance timing out
Here you go. This based on an algorithm I found on Microchip's web site. It is supposedly optimized for the PIC series chips and will always loop 9 times.
Code:
//return the square root of an unsigned 16 bit integer
//based on sample from microchip.com
unsigned int Sqrt16(unsigned int val)
{
unsigned int mask = 0x100;
unsigned int result = 0x80;
while (mask > 0)
{
if ((result * result) > val)
{
result &= ~mask;
}
mask >>= 1;
result |= mask;
}
return result;
}
Sorry, I wasn't paying attention. You need a 32-bit version: Code:
//Return the square root of value x where x is an integer. This
//is based on the fast square root algorithm from microchip.com.
unsigned long sqrt32(unsigned long x)
{
unsigned long mask = 0x1000;
unsigned long result = 0x800;
while (mask > 0)
{
if ((result * result) > x)
{
result &= (~mask);
}
mask >>= 1;
result |= mask;
}
return result;
}
Last edited by seanwitte : 05-03-2004 at 12:58. |
|
#6
|
|||||
|
|||||
|
Re: Distance timing out
Quote:
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Timing of nats for next year | Ian W. | Championship Event | 13 | 03-03-2003 18:28 |
| optimum sensing distance for sensors | DaveG702 | Electrical | 3 | 31-01-2003 22:06 |
| what is or isn't a timing belt? | archiver | 2001 | 6 | 23-06-2002 23:26 |
| two sided timing belt | archiver | 2001 | 3 | 23-06-2002 22:34 |
| Dual Sided Timing Belts | Lachuck894 | Technical Discussion | 9 | 14-01-2002 10:10 |