PDF生成中的绘制和圆弧

PDF生成中的绘制和圆弧,pdf,pdf-generation,draw,Pdf,Pdf Generation,Draw,基本上,我需要使用函数drawArc来创建PDF文件。 drawArc(int x,int y,int width,int height,int startAngle,int arcAngle) 我在中搜索,但没有讨论绘制圆弧的命令(如中所示)。。。所以我想我需要用曲线来模拟圆弧,但这似乎太困难了 任何帮助都将不胜感激,谢谢 编辑。我找到了解决drawEllipse问题的答案,但我需要实现方法drawArc(而不是drawEllipse)。因此,最后我编写了一个分为两个函数的解决方案: pd

基本上,我需要使用函数drawArc来创建PDF文件。

drawArc(int x,int y,int width,int height,int startAngle,int arcAngle)
我在中搜索,但没有讨论绘制圆弧的命令(如中所示)。。。所以我想我需要用曲线来模拟圆弧,但这似乎太困难了

任何帮助都将不胜感激,谢谢


编辑。我找到了解决drawEllipse问题的答案,但我需要实现方法drawArc(而不是drawEllipse)。

因此,最后我编写了一个分为两个函数的解决方案:

pdfDrawArc

private void pdfDrawArc(int x,int y,int width,int height,int startAngle,int arcAngle){
系统输出打印项次(“Arc”);
宽度-=1;
高度-=1;
int n=(int)(Math.ceil(Math.abs(arcAngle/maxAnglePerCurve());
int i;
双电流startAngle=startAngle;
双实际弧角=((双)弧角)/n;
对于(i=0;i

beizer曲线 基于

private double[]Bezier曲线(双x、双y、双宽、双高、双星形、双弧角){
双pi=3.141592;
双a=宽度/2;
双b=高度/2;
//居中
双cx=x+a;
双cy=y+b;
//计算三角运算,这样我们就不需要重复演算了
双cos1=数学cos(startAngle*pi/180);
双sin1=数学sin(startAngle*pi/180);
双余弦2=数学余弦((星缠结+弧角)*π/180);
双sin2=数学sin((星缠结+弧角)*pi/180);
//点p1.起点
双p1x=cx+a*cos1;
双p1y=cy-b*sin1;
//点d1。起点处的一阶导数。
双d1x=-a*sin1;
双d1y=-b*cos1;
//点p2.终点
双p2x=cx+a*cos2;
双p2y=cy-b*sin2;
//d2点。终点处的一阶导数
双d2x=-a*sin2;
双d2y=-b*cos2;
//阿尔法常数
双辅助=数学tan((弧角/2)*π/180);
double alpha=数学sin(弧角*pi/180)*(数学sqrt(4+3*aux*aux)-1.0)/3.0;
//点q1.第一个控制点
双q1x=p1x+α*d1x;
双q1y=p1y+alpha*d1y;
//q2点。第二个控制点。
双q2x=p2x-α*d2x;
双q2y=p2y-α*d2y;
返回新的double[]{p1x,p1y,q1x,q1y,q2x,q2y,p2x,p2y};
}

为什么要从宽度和高度中减去1?另外,
maxAnglePerCurve()
maxAnglePerCurve()做什么?就我所见,最佳的最大角度总是90度。如果我错了,请纠正我!在非常高的变焦率下,我没有看到明显的偏差。