I have below code that needs to be recoded into Python for use in ESRI ArcGIS software.
I would greatly appreciate any assistance. 
Thanks
Sheri
  
/*  The Inner Loop of the Douglas-Peucker line generalization
algorithm is the process of finding, for a section of a polyline,
the vertex that is furthest from the line segment joining the
two endpoints.  The method coded below in C (or C++) is the most
efficient, in terms of operation counts, that I have seen.  */
 /*  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  */
 
long FurthestFromSegment ( /* Return index of furthest point.  */
    long    startindex,    /* Index of start vertex in arrays.  */
    long    endindex,      /* Index of end vertex in arrays.  */
    double *x         ,    /* Array, abscissae of polyline vertices. */
    double *y         ,    /* Array, ordinates of polyline vertices. */
    double *distMaxSquare  /* Return square of maximum distance.  */
                         )
  /*
   This function, given a section of a polyline in arrays,
    will return the index of the intermediate node that is furthest
    from the segment joining the two endpoints of the section,
    and the square of the distance from the segment. 
 
   If no intermediate point exists, then the returned index will
    be the index of the start vertex and the returned distance
    squared will be -1.0 .  Caution:  Do not calculate the square
    root of this returned value without ruling out the possibility
    that it may have defaulted to -1.0 .  In a normal
    Douglas-Peucker application, you should never have to calculate
    the square root of this output value, and you should never
    need to invoke this function without intermediate points. 
  */
{
      /*
       The variable names below assume we find
         the distance of point "A" from segment "BC" .
      */
    long index, outindex ;
    double distSquare, bcSquare ;
    double cx, cy, bx, by, ax, ay ;
    double bcx, bcy, bax, bay, cax, cay ;
 
    *distMaxSquare  =  -1.0 ;
    if ( endindex  <  startindex + 2 )    return startindex ;
    outindex  =  startindex ;
    bx  =  x[startindex] ;
    by  =  y[startindex] ;
    cx  =  x[endindex] ;
    cy  =  y[endindex] ;
      /* Find vector BC and the Square of its length.  */
    bcx  =  cx - bx ;
    bcy  =  cy - by ;
    bcSquare  =  bcx * bcx  +  bcy * bcy ; 
      /* The inner loop:  */
    for ( index = startindex + 1 ; index < endindex ; index++ ) 
    {
          /* Find vector BA .  */
        ax  =  x[index] ;
        ay  =  y[index] ;
        bax  =  ax - bx ;
        bay  =  ay - by ;
          /* Do scalar product and check sign.  */
        if ( bcx * bax  +  bcy * bay    <=    0.0 )
        {
              /* Closest point on segment is B; */
              /*   find its distance (squared) from A .  */
            distSquare   =   bax * bax  +  bay * bay ;
        }
        else
        {
              /* Find vector CA .  */
            cax  =  ax - cx ;
            cay  =  ay - cy ;
              /* Do scalar product and check sign.  */
            if ( bcx * cax  +  bcy * cay    >=    0.0 )
            {
                  /* Closest point on segment is C; */
                  /*   find its distance (squared) from A .  */
                distSquare   =   cax * cax  +  cay * cay ;
            }
            else
            {
                  /* Closest point on segment is between B and C; */
                  /*    Use perpendicular distance formula.  */
                distSquare    =    cax * bay  -  cay * bax ;
                distSquare    =    distSquare * distSquare / bcSquare ;
                      /* Note that if bcSquare be zero, the first                                
                          of the three branches will be selected,
                          so division by zero will not occur here. */
            }
        }
 
        if ( distSquare > *distMaxSquare )
        {
            outindex  =  index ;
            *distMaxSquare  =  distSquare ;
        }
    }
      /*
         Note that in the inner loop above, if we follow
         the most common path where the perpendicular
         distance is the one to calculate, then for each
         intermediate vertex the float operation count is
         1 divide, 7 multiplies, 5 subtracts, 1 add, and 2 compares.  
      */
 
    return outindex ;
}


Need a quick answer? Get one in minutes from people who know. Ask your question on Yahoo! Answers.