美文网首页小白学步
通过两点构建圆弧

通过两点构建圆弧

作者: 爱喝粥的西瓜 | 来源:发表于2021-09-23 14:07 被阅读0次

由于在计算中缺少了一个点,来构建唯一的三角形,用以确定内切圆,故默认过这两个点的内切圆点切线相互垂直

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Test : MaskableGraphic
{
    [SerializeField]
    private Vector3 start, end;

    [SerializeField]
    private float size,angle;
    
    [SerializeField]
    private int count;

    [SerializeField]
    private Color32 color1,color2,color3;

    [SerializeField]
    private Vector3 n1,n2,target;

    protected override void OnPopulateMesh(VertexHelper vh)
    {
        vh.Clear();

        //  计算两点连线的中点
        Vector3 line = end - start;

        Vector3 midPoint = start + line.normalized * line.magnitude / 2;

        //  计算两点连线的法线垂直于外
        Vector3 midPointNormal = Vector3.Cross(Vector3.forward, line).normalized;

        //  构建等腰直角三角形,确定内接圆切线方向 上方定点
        Vector3 topPoint = midPoint + midPointNormal * line.magnitude / 2;

        //  圆心
        Vector3 center = midPoint - midPointNormal * line.magnitude / 2;

        Vector3 lastStart = start ;
        //  角度
        float degree = 90.0f / count;
        for(int i = 1; i <= count;++i)
        {
            Vector3 end = Quaternion.AngleAxis(-degree * i, Vector3.forward) * (start - center) + center;
            DrawLine(vh, lastStart, end, 2, color1);
            lastStart = end;
        }
        //  绘制两条线
        DrawLine(vh, start, topPoint, 1, color2);
        DrawLine(vh, topPoint, end, 1, color2);
        //  两条半径
        DrawLine(vh, start, center, 1, color3);
        DrawLine(vh, center, end, 1, color3);
        //ChartDrawer.DrawLine(vh, mid + (n1 + n2).normalized * 20, end, 2, color2);
    }


    private void DrawLine(VertexHelper vh, Vector3 p1, Vector3 p2, float size, Color32 color)
    {
        UIVertex[] vertex = new UIVertex[4];
        if (p1 == p2) return;
        Vector3 v = Vector3.Cross(p2 - p1, Vector3.forward).normalized * size;
        vertex[0].position = p1 - v;
        vertex[1].position = p2 - v;
        vertex[2].position = p2 + v;
        vertex[3].position = p1 + v;

        for (int j = 0; j < 4; j++)
        {
            vertex[j].color = color;
            vertex[j].uv0 = Vector2.zero;
        }
        vh.AddUIVertexQuad(vertex);
    }
}

相关文章

  • 通过两点构建圆弧

    由于在计算中缺少了一个点,来构建唯一的三角形,用以确定内切圆,故默认过这两个点的内切圆点切线相互垂直

  • Paint类和Canvas类中的方法

    drawArc方法:绘制圆弧 【功能说明】该方法用于在画布上绘制圆弧,通过指定圆弧所在的椭圆对象、起始角度、终止角...

  • 数控车R8圆弧螺纹方程分层法,实例解析宏程序!

    车一圆弧螺纹,圆弧半径8,螺纹深度4.螺纹大直径40.由此可以看出圆弧的圆心不在螺纹大直径上,下面程序通过控制圆弧...

  • 仿照支付宝信用IOS

    实现原理:我的实现原理就是在视图上面画三个圆弧,较大的圆弧的宽度为5.f,上面的字体通过圆的坐标进行排布,然后通过...

  • CircleShape渐变颜色圆环

    设计思路 通过自定义控件实现。将整个圆环拆分成一个个的小圆弧,每个小圆弧画笔的色值不一样,每个圆弧画笔的色值都是起...

  • ListView的构造方法

    通过集合的方式构建 通过ListView.build()构建 通过ListView.separated()构建 通...

  • 构建镜像

    通过容器构建镜像 通过Dockerfile构建镜像

  • 无标题文章

    圆弧之钱16个分控,圆弧4个,圆弧之后4个

  • 【WPF】绘制简单常用的Path

    MSDN告诉我们,Path可以用这些形状绘制: ArcSegment 类 表示两点之间的一条椭圆弧。 Bezier...

  • 第五章 制图的基本知识

    1、标注圆弧的弧长时,表示尺寸线应以( ) A.箭头 B.该圆弧同心的圆弧线表示 C.标注圆弧的弦长D.平行与圆弧...

网友评论

    本文标题:通过两点构建圆弧

    本文链接:https://www.haomeiwen.com/subject/duqogltx.html