有人可以解释一下 arcTo 的最后两个参数吗?

2024-04-27

我正在尝试绘制一个带圆角的矩形。我有一个 javascript 路径可以执行此操作,但 javascript arcTo 方法采用一个矩形(定义其椭圆形),然后采用一个参数来设置扫描。

然而,在Android版本中有三个参数。矩形椭圆形(我认为我已经正确定义了),然后是startAngle和sweepAngle(我不理解其用法),但是我的弧线看起来并不像我在思考如何使用时所期望的那样我猜他们应该可以工作。

有人知道这方面的好教程吗?

具体来说,我试图理解如果我试图从 12 - 3 绘制一条弧线(在钟面上),然后假设我有一条从 3 向下延伸的线,然后需要从 3 到 6 的拐角处,依此类推。

这是我的代码(现在忽略其中的弧数......这只是我猜测它如何工作的最新迭代,在之前更明智的尝试中失败了):

Path ctx = new Path();
        ctx.moveTo(X+5,Y); //A
        ctx.lineTo(X+W-5,Y);//B
        ctx.arcTo(new RectF(X+W, Y, X+W, Y+5), -180, 90); //B arc

        ctx.lineTo(X+W,Y+H-5); //C
        ctx.arcTo(new RectF(X+W,Y+H,X+W-5,Y+H),90,180); //C arc

        ctx.lineTo(X+W/2 +6,Y+H);
        ctx.lineTo(X+W/2,Y+H+8);
        ctx.lineTo(X+W/2-6,Y+H);
        ctx.lineTo(X+5,Y+H);
        ctx.arcTo(new RectF(X,Y+H,X,Y+H-5),180,270);

        ctx.lineTo(X,Y+5);
        ctx.arcTo(new RectF(X,Y,X+5,Y),270,0);
        Paint p = new Paint();
        p.setColor(0xffff00ff);

        canvas.drawPath(ctx, p);

多谢。


奇怪的是没有人提供答案,一旦我找到它(不容易找到),它真的很简单。

所以,它的工作方式是这样的: 假设您想在 12 - 3 处绘制圆角(使用时钟参考): 你开始你的路径,当你需要这条线形成弧线时,你定义一个矩形,它的左上角是你的线当前终止的地方,它的右下角是你想要弧线到达的地方,所以如果你想象一个 X,Y 为 12(时钟上)且 X+W,Y+H 为 3 的正方形,这就是您需要的正方形。

现在,假设您在该正方形中有一个椭圆形(在本例中,它是一个圆形椭圆形,如果您希望曲线更加椭圆形,则将正方形定义为矩形),您可以使用该圆的任何切片该方法的最后两个参数。第一个参数定义要开始切割的角度。如果我们使用指南针,0 度是东(不知道为什么,我不是几何专家...这正常吗?我总是认为 0 是北,但我看到的所有编程几何示例都将 0 作为东方,也许有人会评论为什么会这样)。

第二个参数定义了您想要的圆的大小。如果你想要整个圆,你就输入360;如果你想要半个圆,你就输入180等等。

因此,在我们的例子中,由于我们想要将角从 12 转为 3,因此我们将 270 作为起始度数并获取圆的 90 度。

最后,当您完成此过程后,该线路现在认为自己处于下午 3 点,因此您可以从那里继续 lineTo(ing)。 所以...这是我的形状的固定代码(它里面有一个小三角形,但这既不在这里也不在那里,实际的圆形部分是 B-C、D-E、I-J 和 K-A。其余的都是直线。

int arc = 25;
    public Cursor(int X, int Y, int W, int H){
        /*
         *   A            B
         * K                C 
         * J                D
         *   I   H   F    E
                   G
         */
        int Ax = X+ arc;
        int Ay = Y;
        int Bx = X + W - arc;
        int By = Y;
        int Cx = X + W;
        int Cy = Y + arc;
        int Dx = Cx;
        int Dy = (Y + arc) + (H - arc*2);
        int Ex = Bx;
        int Ey = Y + H;
        int Fx = X+W/2 +6;
        int Fy = Ey;
        int Gx = X+W/2;
        int Gy = Y+H+8;
        int Hx = X+W/2-6;
        int Hy = Ey;
        int Ix = Ax;
        int Iy = Hy;
        int Jx = X;
        int Jy = Dy;
        int Kx = X;
        int Ky = Cy;


        Path ctx = new Path();
        ctx.moveTo(Ax,Ay); //A
        ctx.lineTo(Bx,By);//B
        ctx.arcTo(new RectF(Bx, By, Cx, Cy), 270, 90); //B-C arc

        ctx.lineTo(Dx,Dy); //D
        ctx.arcTo(new RectF(Dx - arc, Dy, Ex + arc, Ey),0,90); //D-E arc

        ctx.lineTo(Fx, Fy); //E-F
        ctx.lineTo(Gx, Gy); //F-G
        ctx.lineTo(Hx, Hy); //G-H
        ctx.lineTo(Ix, Iy); //H - I
        ctx.arcTo(new RectF(Jx, Jy, Ix, Iy),90,90);// I = J arc

        ctx.lineTo(Kx, Ky); //K
        ctx.arcTo(new RectF(Ax - arc, Ay, Kx + arc, Ky),180,90); //K - A arc
        ctx.lineTo(Ax, Ay); //K



        Paint p = new Paint();
        p.setAntiAlias(true);
        p.setColor(0xffffffff);
        p.setStyle(Style.FILL);
        canvas.drawPath(ctx, p);    
        p.setColor(0xff000000);
        p.setStyle(Style.STROKE);
        p.setStrokeWidth(3);            
        canvas.drawPath(ctx, p);



    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有人可以解释一下 arcTo 的最后两个参数吗? 的相关文章

随机推荐

  • 我应该使用 Facelets“jsfc”属性吗?

    Facelets 使用jsfc属性将 HTML 元素转换为其关联的JSF成分 这对于快速原型设计非常有帮助 因为它允许您使用可视化设计工具创建视图 然而我最近发现this http weblogs java net blog 2008 12
  • support-library-v7 上的 ClassCastException,使用版本 21

    背景 在过去的两周里 我一直将我的应用程序从 ActionBarSherlock 转移到 Google 的官方支持库 以获得 Material Design 风格 我已经更新到最新版本 21 并且包含了 v4 和 v7 My app htt
  • 是什么让 jQuery 对象在 Chrome 开发工具中显示为数组?

    我想知道 jQuery 对象如何在 Chrome 开发者工具的控制台日志中显示为数组 例如 如果我执行 a 我在控制台日志中看到的是 a a 但以下说法是错误的 var a a Array isArray a false a instanc
  • 实体框架:如何检测数据库的外部更改

    我有一个存储过程可以更改数据库中的大量数据 该存储过程是从同时使用 EF 进行数据操作的应用程序调用的 因此 我单击一个按钮 存储过程在数据库中运行 数据发生更改 并且 EF 向用户显示旧数据 有没有办法强制 DbContext 或 Obj
  • 有条件地使用文件夹大小

    我只想在大小大于特定大小时删除文件夹 不幸的是我无法达到想要的结果stat module Attempt hosts pluto tasks stat path home ik thunderbird register folder nam
  • 无法放弃 git 中的更改

    一两周前 我拿了一些文件 这些文件是我用一个简单的程序存档的find sed tar xz gpgbash 脚本 将它们全部解压 并将它们的内容放入 git 存储库中 提交 将下一个档案内容放入存储库中 提交 冲洗并重复 以便拥有一个更好的
  • 按日期顺序排列的 T-SQL 查询组(间隙和孤岛)

    我有一个这样的示例表 CREATE TABLE Aggregate vKey INT dKey INT StartTrip DATETIME EndTrip DATETIME Distance INT 像这样的一些样本数据 INSERT I
  • 如何解决大内容的角度性能问题

    我熟悉 Angular 的摘要周期以及它如何影响长列表和大模型值的性能 我只是好奇您是否有专门针对我的情况的问题的解决方法 我正在构建一个应用程序 它可能需要也可能不需要用户输入大文本 例如错误日志textarea 但由于与 2 路数据绑定
  • R Studio:更改光标颜色

    我在 R Studio 中使用 Cobalt 编辑器主题 通过更改相应的 cache css 文件对其进行了稍微调整 背景颜色是深色的 我的选择 但文本光标 鼠标指针 也是深色的 因此很难看到 在哪里或如何将鼠标指针颜色更改为例如 cach
  • 在同一节点上匹配不同配置的模板

    我问了我的整个问题这里关于堆栈溢出 https stackoverflow com questions 64966059 nesting xsl templates and referring multiple templates to t
  • AppBarLayout 滚动时 RecyclerView fling 导致延迟

    我的布局如下
  • 在 dplyr 链中传递价值

    假设我有以下列 CurrentStatus Current NoChange NoChange NoChange NoChange Late 我想改变它 以便如果该值为 NoChange 则它使用先前的值 I tried myDF gt m
  • 通过存储过程将记录传输到目标表后,从源表中删除记录

    这是我在 user75ponic 的帮助下生成的存储过程 CREATE OR REPLACE PROCEDURE ARCHIVE DATA AS BEGIN MERGE INTO Schema2 table trg USING SELECT
  • Objective C:如何从 appdelegate 呈现模态视图控制器?

    我在我的应用程序的 appdelegate 中 如何在 didfinishlaunching 方法中添加模式视图控制器 我尝试了以下方法但没有成功 SomeViewController vc SomeViewController alloc
  • 使用 PHP SDK 在亚马逊 S3 上上传文件

    我正在尝试通过 PHP SDK 在我的亚马逊 S3 存储桶上上传文件 但是我的脚本不起作用 我有一个空白页面 没有任何错误或异常消息 编辑 在 php ini 中启用 display error 后 我有下面的错误消息 看起来 sdk 在我
  • DataGridView 自动添加新行 - 为什么?

    您好 我有一个使用 Windows 窗体的旧 C 应用程序 编写得非常糟糕 我最近不得不对应用程序进行一些广泛的更改 现在我面临着相当奇怪的问题 该应用程序最初设计为在主窗口 OnLoad 方法中加载数据 我知道这是一个糟糕的想法 后来重构
  • 我如何返回包含 c++ 中两个映射差异的 std::map ?

    我有两张地图 我需要找到差异并创建一张只有差异的新地图 不知道该怎么做 我尝试使用 set difference 但不太明白它是如何工作的 任何帮助 将不胜感激 谢谢 header file typedef std map
  • Java 文档生成器为 Xml 字符串返回 null 文档

    I have tried all possible answers https stackoverflow com questions 33098082 passing xml string as document returning nu
  • 在unity3d中通过标签查找不活动的游戏对象[重复]

    这个问题在这里已经有答案了 我有一个游戏对象 我希望在特定条件下激活它 我给了它一个独特的标签 并尝试使用GameObject FindObjectWithTag Tag name 据我所知 此方法只会找到场景中活动的游戏对象 而不是非活动
  • 有人可以解释一下 arcTo 的最后两个参数吗?

    我正在尝试绘制一个带圆角的矩形 我有一个 javascript 路径可以执行此操作 但 javascript arcTo 方法采用一个矩形 定义其椭圆形 然后采用一个参数来设置扫描 然而 在Android版本中有三个参数 矩形椭圆形 我认为