二维几何图形创作方法(Geometry2D)

           本文所讲的内容已经开源,你可以在 这里 找到源代码。 


       这里我们介绍一下在场景中构建二维几何图形,计算图形的顶点、边的方法。创作几何图形主要依靠鼠标(或者触摸屏、手写笔之类的点输入设备),输入几个点,快速画出几何图形。大部分图形只要有两个点就能创作出来。

        输入两个点A、B,将确定一个二维图形,并且计算出其作图路径。

三角形

等腰三角形

        如图,已知两个顶点 A、B 的坐标,要求另一个顶点 C 的坐标。

        这里规定 BC 平行于坐标轴 X 轴,且根据等腰性质,BC 的中点 D 与 A 的连线 AD 垂直于 BC,所以 D 的坐标为 {A.x,B.y},C 点坐标为 {A.x * 2 - B.x, B.y}。

直接三角形

         如图,已知两个顶点 A、B 的坐标,要求另一个顶点 C 的坐标。

        这里规定 BC 平行于坐标轴 X 轴,所以易得 C 点坐标为 {A.x, B.y}。

四边形

平行四边形

        如图,已知两个顶点 A、B 的坐标,要求另外两个顶点 C、D 的坐标。

        这里规定 AC、BD 平行于坐标轴 X 轴,但是 C 点的 x 坐标仍然不好确定。所以进一步规定 C的 x 坐标是 A、B x 坐标的中点。所以 C 点坐标为 {(A.x + B.x) / 2, A.y}。

        再根据平行四边形的性质,计算出 D = A + B - C = {(A.x + B.x) / 2, B.y}。

长方形(矩形)

         如图,已知两个顶点 A、B 的坐标,要求另外两个顶点 C、D 的坐标。

        这里规定 AC、BD 平行于坐标轴 X 轴,所以易得 C 点坐标为 {B.x, A.y}。

        再根据平行四边形的性质,计算出 D = A + B - C = {A.x, B.y}。

直角梯形

         如图,已知两个顶点 A、B 的坐标,要求另外两个顶点 C、D 的坐标。 

        这里规定 AC、BD 平行于坐标轴 X 轴,但是 C 点的 x 坐标仍然不好确定。所以进一步规定 C的 x 坐标是 A、B x 坐标的中点。所以 C 点坐标为 {(A.x + B.x) / 2, A.y}。

        再根据直角性质,易得 D 点坐标为 {A.x, B.y}。

等腰梯形

         如图,已知两个顶点 A、B 的坐标,要求另外两个顶点 C、D 的坐标。 

        这里规定 AC、BD 平行于坐标轴 X 轴,但是 C 点的 x 坐标仍然不好确定。所以进一步规定 C的 x 坐标是 A、B x 坐标的中点。所以 C 点坐标为 {(A.x + B.x) / 2, A.y}。

         再根据等腰梯形的性质,有 AC,BD 两个中点的坐标,其 x 坐标值相等,所以 D 的坐标为:{(A.x + B.x) / 2 + A.x - B.x, B.y},即:{(A.x * 3 - B.x) / 2, B.y}

正方形

        如图,已知顶点 A、和另一个点 B' 的坐标,B' 不一定是正方形的顶点,要求另外三个顶点 B、C、D 的坐标。 

        这里规定 AC、BD 平行于坐标轴 X 轴。

        首先求 B 点的坐标。AB 在 x、y 轴上的坐标距离,即正方形边长 l,他们是相等的,且等于 AB' 在 x、y 轴上的坐标距离中的较大值: l = max(abs(A.x - B'.x, A.y - B'.y) 。

        另外,矢量 AB 的各个分量的符号与 AB' 的各个分量的符号相同,所以 B 的坐标为:

        {A.x + sign(B'.x - A.x) * l, A.y + sign(B'.y - A.y) * l}

        易得 C 的坐标为:{A.x + sign(B'.x - A.x) * l, A.y},D 的坐标为: {A.x, A.y + sign(B'.y - A.y) * l}。

菱形

         如图, 根据输入的点 P、Q,求菱形四个顶点 A、B、C、D 的坐标。 

        这里规定 BD 平行于坐标轴 X 轴。易知 PQ 的中点就是菱形的中心。而 P 与 A、D 轴对齐,Q 与 B、C 轴对齐,所以四个坐标分别为:

        A = {(P.x + Q.x) / 2, P.y}

        B = {Q.x, (P.y + Q.y) / 2}

        C = {(P.x + Q.x) / 2, Q.y}

        D = {P.x, (P.y + Q.y) / 2}

弧形

          如图, 输入的点 P、Q,则圆心为 P,半径为 PQ 的长度。

椭圆

          如图, 输入的点 P、Q,则椭圆心为 P,长短轴的长度为 abs(Q.x - P.x) 和 abs(Q.y - P.y),椭圆的包围矩形的四个顶点分别为:

        A = {(P.x * 2 - Q.x) / 2, (P.y * 2 - Q.y)}

        B = {Q.x, (P.y * 2 - Q.y)}

        C = Q

        D = {(P.x * 2 - Q.x) / 2, Q.y}

扇形

         如图, 输入的点 P、Q, 则扇形的圆心为 P,半径为 PQ 的长度。

         这里规定扇形弧的起始方向角为 0°(X 轴方向),终止方向角为 \underset{PQ}{\rightarrow} 的方向。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting Horse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值