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

本文关键字:绘制 三角形 WPF 鼠标 拖动 | 更新日期: 2023-09-27 18:31:23

我正在尝试在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;

我把它添加到其他地方的画布子项中。 此代码允许我单击画布并拖动鼠标以调整矩形或椭圆的大小。

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

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

如果你这样排序你的点:

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)