Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以常规方式从圆弧中提取顶点_Javascript_Algorithm_Geometry_Bresenham_Rasterize - Fatal编程技术网

Javascript 以常规方式从圆弧中提取顶点

Javascript 以常规方式从圆弧中提取顶点,javascript,algorithm,geometry,bresenham,rasterize,Javascript,Algorithm,Geometry,Bresenham,Rasterize,我想从一个弧中得到所有顶点。我有ex的所有数据:起点、终点、起点角度、终点角度、半径,这些数据将用于绘制圆弧,但我需要的是我必须从圆弧数据生成所有顶点 我已经尝试过一个或两个算法,但未能从圆弧数据中获得准确的顶点 我使用了Bresenham的算法,但失败了 现在我正在使用下面的代码,但它不工作 double theta = 2 * 3.1415926 / 100; double c = Math.cos(theta); d

我想从一个弧中得到所有顶点。我有ex的所有数据:起点、终点、起点角度、终点角度、半径,这些数据将用于绘制圆弧,但我需要的是我必须从圆弧数据生成所有顶点

我已经尝试过一个或两个算法,但未能从圆弧数据中获得准确的顶点

我使用了Bresenham的算法,但失败了

现在我正在使用下面的代码,但它不工作

            double theta = 2 * 3.1415926 / 100; 
            double c = Math.cos(theta);
            double s = Math.sin(theta);
            double t;

            double x = ((ArcTo) element).getRadius();//we start at angle = 0 
            double y = 0; 

            for(int ii = 0; ii < 100; ii++) { 
              coordinates.add(new Coordinate(x + element.getCenterPoint().getX(), y + element.getCenterPoint().getY()));//output vertex 

              //apply the rotation matrix
              t = x;
              x = c * x - s * y;
              y = s * t + c * y;
            }
请帮帮我。多谢各位

首先是一些澄清

我假设顶点是指像素和圆弧是标准的2D圆弧而不是椭圆圆弧!!!您的输入数据是:

int x0,y0,x1,y1//曲线上的星形/端点!!! 浮动a0,a1//起始角和终止角[rad] int xc,yc//圆心 int r//半径 不要使用Bresenham

因为需要从零角度开始计算所有像素,直到到达起点。然后翻转draw标志,从该点开始填充像素,并在端点命中时停止。此外,还需要处理绕组以匹配电弧方向

可以使用圆参数方程

//只是一些要测试的弧数据 浮点数r=25.0; 浮球a0=45.0*M_PI/180.0; 浮子a1=270.0*M_PI/180.0; int xc=100,x0=xc+floorr*cosa0,x1=xc+floorr*cosa1; int yc=100,y0=yc+floorr*sina0,y1=yc+floorr*sina1; //弧光栅化代码 int x,y; 浮动a,da; //这里画像素x0,y0和x1,y1以避免圆孔。。。 如果r da=0.75/浮子;else da=0.1;//步距略小于像素,以避免出现孔洞 对于a=a0;;a+=da { x=xc+intfloorr*cosa; y=yc+intfloorr*sina; //这里画像素x,y 如果x==x1&&y==y1//如果到达端点则停止
如果fabsa-A1最简单的方法是使用Bresenham的算法。@EgorSkriptunoff Thanx供您回复。我已经尝试过了,但它对arc不起作用。将您的代码与Bresenham的算法的实现一起发布。说出到底什么不起作用。@EgorSkriptunoff您可以在这里找到我的代码-。它画了一个圆,但我想画一个圆弧,而不是c创建一个圆。我有画圆弧所需的所有变量。