在Android中绘制断开的路径

问题描述 投票:0回答:1

我正在尝试创建以下图形:1 /(x平方-1)

如您所见,图形看起来不错:enter image description here

下面的代码绘制了上图。但我不希望显示垂直渐近线。

path.moveTo(valx, valy);
path.quadTo(x, y, middle2, middle);
path.lineTo(x, y); // I think this is what causes the vertical asymptotes to show
canvas.drawPath(path, points);
path.reset();

通过查看上面的线path.lineTo,我可以看到路径是用直线连接点。那是为什么绘制垂直渐近线。

我实现的想法如下,使用伪代码:

//split the x axis into regions and compute a limiting value for each region
Boolean drawMe = false;
//region1: those x values less than the first asymptote = -1
if(Float.compare(x values , first asymptote = -1) < 0 && Float.compare(absolute value of
(Math.abs(x value) - Math.abs(first asymptote) , 0.01f ) > 0)drawMe = true

//region2: those x values between both asymptotes which are -1 and 1:
if(Float.compare(x values , first asymptote) > 0 && Float.compare(x values , second asymptote) < 0
   && Float.compare(absolute value of(Math.abs(x value) - Math.abs(first asymptote) , 0.01f) > 0
   && Float.compare(absolute value of(Math.abs(x value) - Math.abs(second asymptote) , 0.01f) > 0)
   drawMe = true;

//region3: those x values greater than the second asymptote = 1:
if(Float.compare(x values , second asymptote) > 0 && Float.compare(absolute value of(Math.abs(x value) - Math.abs(second asymptote) , 0.01f) > 0 ) drawMe = true;

if(drawMe){
path.moveTo(valx, valy);
path.quadTo(x, y, middle2, middle);
path.lineTo(x, y); // I think this is what causes the vertical asymptotes to show
canvas.drawPath(path, points);
path.reset();
}

但是,将x轴拆分为多个区域会再次绘制相同的东西。我需要找到一种方法来阻止渐近线的绘制,我认为最大的问题在于进入代码行:path.lineTo

任何建议

android canvas graphics path android-canvas
1个回答
0
投票

解决方案如下:

  • 根据垂直渐近线所在的位置将x轴分成多个区域

  • 当将点添加到路径时,请检查点的x值是否不在垂直渐近线的某个阈值

  • 不要重置路径,不要绘制路径。等待for循环添加所有点除了那些在垂直渐近线的某个阈值内的那些]
  • 通过不将这些点添加到路径中,路径将被分解并显示正确的图形
  • for循环完成将点添加到路径后,绘制路径

  • First

    关闭路径:path.close();然后:canvas.drawPath(path,points);

    逻辑是正确的

,不同之处在于,我没有像其余点那样对x值和垂直渐近线值进行变换。这就是为什么,路径被重新绘制成完全相同。

查看图片,我什至可以冲破渐近线:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.