如何旋转三角形使其底部平直?

Posted

技术标签:

【中文标题】如何旋转三角形使其底部平直?【英文标题】:How to rotate triangle such that its base is flat straight? 【发布时间】:2018-10-25 01:25:06 【问题描述】:

考虑到我的英语不是很好。我会尝试使用图片

希望你能明白我的意思。基本上我想要的是我想旋转三角形,使三角形的底部是平直的(水平直的)。请记住,三角形是一个形状。我知道每个点的坐标,以及每个边缘的每个中点。我该怎么做?

【问题讨论】:

【参考方案1】:

(1)

"基本上我想要的是旋转三角形,使得 三角形的底是平直的(水平直的)。"

您可以简单地设置为point_C.y = point_B.y(这会将点C 放置在与点B 相同的垂直高度上,这样现在这两个点之间的水平线将是一条直线。

(2)

"鼠标点击形成三角形的点。每点击一次鼠标,我 指向 (mouseX, mouseY)。所以,三角形可能是完全随机的。"

我会创建一个变量来记录点击次数...

//# count clicks to know when straight line is needed
public var count_Clicks :uint = 0;

//# straight line via "IF" statement
private function draw_Triangle_Point (evt :MouseEvent) : void    

    count_Click += 1; //add plus 1

    if (count_Clicks == 3)
    
        point_C.x = stage.mouseX;
        point_C.y = point_B.y; //straight (horiz) line

        count_Clicks = 0; //reset
    
    else
    
        //draw your other two points
    


希望对你有帮助。

【讨论】:

【参考方案2】:

这似乎是一个等边三角形,所以你不能把三角形旋转 120 度吗?

如果没有,您可以使用 Math.atan。简单地说,你可以得到 a 和 c 的 x 和 y 坐标。使用 x 和 y 之间的差异为您提供两个向量。然后 x = 相邻,y = 相反,因此 Math.atan(Opp, Adj) = 角度。然后选择您的对象并将其旋转一个额外的角度值。

https://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Math.html#atan()

认为这就是你所追求的

编辑

所以这张图片是我认为你所追求的。我随机画了一个三角形。现在你想要 B.y = C.y。因此,如果您获得 r 的角度,您应该能够使用它来将三角形旋转正确的量,以便 B.y = C.y.

您必须考虑如果 B.y > C.y 会发生什么情况,并对其进行调整以使其 100% 工作,但在此示例中应该可以工作。

【讨论】:

遗憾的是,它不是等边三角形。通过鼠标单击形成三角形的点。每次鼠标点击,我都会指向 (mouseX, mouseY)。所以,三角形可能是完全随机的。另外,你的意思是a和c还是b和c?因为字母 A 是蓝色的,所以有点看不见。 我的意思是 b 和 c。抱歉,当我靠近时,我可以看到这是一个“b”,但如果那一侧最靠近基地,你仍然需要使用 a 和 c。 我仍然不确定您所说的最接近基地是什么意思。根据我得到的信息,假设我们想象一条水平平线穿过点 B。你的意思是我需要找到水平线和线段 BC 形成的角度,对吗?然后将形状旋转该角度。我明白为什么会这样。但我不确定为什么我需要工作 a 和 c? 我在想用户是否正在绘制三角形。如果他们使“a”最接近基地怎么办。如果“a”和“b”互换了怎么办?

以上是关于如何旋转三角形使其底部平直?的主要内容,如果未能解决你的问题,请参考以下文章

如何在openGL中旋转图像?

three.js围绕边缘旋转三角形

底部带有三角形的蒙版图像

我想做类似三角形的旋转木马,但是怎么做? [复制]

如何在OpenGL中计算三角形网格的顶点法线?

如何在OpenGl中计算三角形网格的顶点法线?