ellipse2bezier.cpp [plain text]
#include "common/Geometry.h"
void ellipse2bezier(Rect &r, Line &out) {
out.degree = 3;
out.resize(13,Coord());
const double EToBConst = 0.2761423749154,
translation = (r.b>r.t)?-1.0:1.0;
Coord offset(r.Width() * EToBConst, r.Height() * EToBConst);
Coord center(r.Center());
out[0].x = out[1].x = out[11].x = out[12].x = r.l; out[5].x = out[6].x = out[7].x = r.r; out[2].x = out[10].x = center.x - offset.x; out[4].x = out[8].x = center.x + offset.x; out[3].x = out[9].x = center.x;
out[2].y =
out[3].y =
out[4].y = r.t;
out[8].y =
out[9].y =
out[10].y = r.b;
out[7].y =
out[11].y = center.y - translation*offset.y;
out[1].y =
out[5].y = center.y + translation*offset.y;
out[0].y =
out[12].y =
out[6].y = center.y;
}