gpt4 book ai didi

language-agnostic - 给定圆心画一个等边三角形

转载 作者:行者123 更新时间:2023-12-04 03:04:54 24 4
gpt4 key购买 nike

给定中心为cx 如何绘制等边三角形和 cy和质心圆的半径?

我如何找到一个点是否在三角形内?

enter image description here

PS:我正在为 android 构建这个,但这个问题与语言无关。

最佳答案

对于你的第一个问题

上图中的 C 点很简单,就是 ( cx, cy + r )。

我可以想到两种相当简单的方法来获得 a 和 b 点:

第一种方法 : 假设 (cx,cy) 是原点,将 C 点旋转 60 度和 120 度以获得 a 和 b。这可以通过以下公式完成:

  • b.x = c.x * cos( 120 度 ) - ( c.y * sin( 120 度 ) )
  • b.y = c.x * sin( 120 度 ) + ( c.y * cos( 120 度 ) )
  • a.x = c.x * cos(240 度) - (c.y * sin(240 度))
  • a.y = c.x * sin( 240 度 ) + ( c.y * cos( 240 度 ) )

  • 也看看 this article on wikipedia .

    第二种方法 : 画一条穿过 (c.x, c.y) 并具有 -30 度斜率的线。该线与圆相交的地方将是 b 点。圆由以下等式定义:
     ( x - c.x )^2 + ( y - c.y )^2 = r^2 

    (注意,会有两个交点,所以选择正确的一个)。

    然后用一条通过 (c.x, c.y) 的正 30 度角线做同样的事情,得到点 a。

    你的线条会有斜率:1/sqrt(3) 和 -1/sqrt(3)

    对于你的第二个问题

    一旦有了形成等边三角形的点 A、B 和 C,检测点 (x,y) 是否位于三角形中的最快和最简单的方法之一就是基于叉积和向量。

    基本上,看看 (x,y) 是否在“向量”A->B 的左侧。然后看看是不是在B->C的左边。然后检查它是否在 C->A 的左侧。

    以下方法引用自 here让您检查一个点是否在向量的左侧。
    public bool isLeft(Point A, Point B, Point C){
    return ((B.x - A.x)*(C.y - A.y) - (B.y - A.y)*( C.x - A.x)) > 0;
    }

    在方法中 A = line point1, b = line point2, and c = point to check.

    关于language-agnostic - 给定圆心画一个等边三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11449856/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com