MCPcopy
hub / github.com/CadQuery/cadquery / arc_arc

Function arc_arc

cadquery/hull.py:224–295  ·  view source on GitHub ↗
(a1: Arc, a2: Arc)

Source from the content-addressed store, hash-verified

222
223
224def arc_arc(a1: Arc, a2: Arc) -> Tuple[float, Segment]:
225
226 r1 = a1.r
227 xc1, yc1 = a1.c.x, a1.c.y
228
229 r2 = a2.r
230 xc2, yc2 = a2.c.x, a2.c.y
231
232 # construct tangency points for a related point-circle problem
233 if r1 > r2:
234 arc_tmp = Arc(a1.c, r1 - r2, a1.a1, a1.a2)
235 xtmp1, ytmp1, xtmp2, ytmp2 = _pt_arc(a2.c, arc_tmp)
236
237 delta_r = r1 - r2
238
239 dx1 = (xtmp1 - xc1) / delta_r
240 dy1 = (ytmp1 - yc1) / delta_r
241
242 dx2 = (xtmp2 - xc1) / delta_r
243 dy2 = (ytmp2 - yc1) / delta_r
244
245 elif r1 < r2:
246 arc_tmp = Arc(a2.c, r2 - r1, a2.a1, a2.a2)
247 xtmp1, ytmp1, xtmp2, ytmp2 = _pt_arc(a1.c, arc_tmp)
248
249 delta_r = r2 - r1
250
251 dx1 = (xtmp1 - xc2) / delta_r
252 dy1 = (ytmp1 - yc2) / delta_r
253
254 dx2 = (xtmp2 - xc2) / delta_r
255 dy2 = (ytmp2 - yc2) / delta_r
256
257 else:
258 dx = xc2 - xc1
259 dy = yc2 - yc1
260 l = sqrt(dx ** 2 + dy ** 2)
261
262 dx /= l
263 dy /= l
264
265 dx1 = -dy
266 dy1 = dx
267 dx2 = dy
268 dy2 = -dx
269
270 # construct the tangency points and angles
271 x11 = xc1 + dx1 * r1
272 y11 = yc1 + dy1 * r1
273 x12 = xc1 + dx2 * r1
274 y12 = yc1 + dy2 * r1
275
276 x21 = xc2 + dx1 * r2
277 y21 = yc2 + dy1 * r2
278 x22 = xc2 + dx2 * r2
279 y22 = yc2 + dy2 * r2
280
281 a1_out = atan2p(x21 - x11, y21 - y11)

Callers 1

get_angleFunction · 0.85

Calls 5

ArcClass · 0.85
_pt_arcFunction · 0.85
atan2pFunction · 0.85
SegmentClass · 0.85
PointClass · 0.85

Tested by

no test coverage detected