C# 使用鼠标拖动在WPF中绘制三角形

C# 使用鼠标拖动在WPF中绘制三角形,c#,wpf,C#,Wpf,我正在尝试用C#的WPF制作一个非常简单的绘画项目。除了画三角形外,我几乎什么都能做。我无法计算出创建三角形所需的数学运算 我有这样的代码来绘制矩形和圆形: case "Rectangle": case "Ellipse": var x = Math.Min(pos.X, mm.startPoint.X); var y = Math.Min(pos.Y, mm.startPoint.Y); var width = Math.Max(pos.X, mm.startPoin

我正在尝试用C#的WPF制作一个非常简单的绘画项目。除了画三角形外,我几乎什么都能做。我无法计算出创建三角形所需的数学运算

我有这样的代码来绘制矩形和圆形:

case "Rectangle":
case "Ellipse":
    var x = Math.Min(pos.X, mm.startPoint.X);
    var y = Math.Min(pos.Y, mm.startPoint.Y);

    var width = Math.Max(pos.X, mm.startPoint.X) - x;
    var height = Math.Max(pos.Y, mm.startPoint.Y) - y;

    mm.shapeObj.Width = width;
    mm.shapeObj.Height = height;

    Canvas.SetLeft(mm.shapeObj, x);
    Canvas.SetTop(mm.shapeObj, y);
    break;
我把它添加到画布的其他地方。这段代码允许我点击画布并拖动鼠标来调整矩形或椭圆的大小


我希望用三角形做类似的事情。为了简单起见,我只希望用户能够单击屏幕并拖出一个等边三角形。我想让用户只需点击三次就可以创建三角形,但由于项目的编码方式,这比听起来要困难一些。但是,如果没有任何方法来计算我试图创建的三角形,我可以通过三次单击使其工作。

如果您按如下顺序排列您的点:

int smX = startPoint.X < finalPoint.X ? startPoint.X : finalPoint.X;
int bgX = startPoint.X < finalPoint.X ? finalPoint.X : startPoint.X;

int smY = startPoint.Y < finalPoint.Y ? startPoint.Y : finalPoint.Y;
int bgY = startPoint.Y < finalPoint.Y ? finalPoint.Y : startPoint.Y;
因此,您可以使用矩形的中间设置三角形的点,而不是使用这些点绘制三角形:

(smX, smY)
(smX, bgY)
(bgX, smY)
(bgX, bgY)
(smX, bgY)
(bgX, bgY)
(smX + ((bgX - smX) / 2), smY)

我明白这个部分。我知道如何画三角形。问题是我没有像那个例子中那样的静态x和y位置。我只知道用户点击的位置和他们拖动鼠标的位置,我需要用它形成一个等边三角形。完成:)很抱歉在第一个答案中解释错误。我甚至没有想到这样的事情!谢谢,这应该很好用。那么,你需要什么?三个顶点的坐标?起点是什么?三角形的中心还是其中一个顶点?