Returns the length of a circular arc segment.
135{
137 double radius_A, circumference_A;
138 int a2_side, clockwise;
139 double a1, a3;
140 double angle;
141
143 return 0.0;
144
146
147
148 if ( radius_A < 0 )
149 {
150 double dx = A1->
x - A3->
x;
151 double dy = A1->
y - A3->
y;
152 return sqrt(dx*dx + dy*dy);
153 }
154
155
156 circumference_A = M_PI * 2 * radius_A;
158 return circumference_A;
159
160
162
163
164
165 if ( a2_side == -1 )
167 else
169
170
171 a1 = atan2(A1->
y - C.
y, A1->
x - C.
x);
172 a3 = atan2(A3->
y - C.
y, A3->
x - C.
x);
173
174
175 if ( clockwise )
176 {
177 if ( a1 > a3 )
178 angle = a1 - a3;
179 else
180 angle = 2*M_PI + a1 - a3;
181 }
182 else
183 {
184 if ( a3 > a1 )
185 angle = a3 - a1;
186 else
187 angle = 2*M_PI + a3 - a1;
188 }
189
190
191 return circumference_A * (angle / (2*M_PI));
192}
#define LW_TRUE
Return types for functions with status returns.
double lw_arc_center(const POINT2D *p1, const POINT2D *p2, const POINT2D *p3, POINT2D *result)
Determines the center of the circle defined by the three given points.
int lw_segment_side(const POINT2D *p1, const POINT2D *p2, const POINT2D *q)
lw_segment_side()
int lw_arc_is_pt(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3)
Returns true if arc A is actually a point (all vertices are the same) .
int p2d_same(const POINT2D *p1, const POINT2D *p2)