c# - 如何通过wpf画布中的坐标获取矩形位置
问题描述
我有一些用于绘制矩形的坐标。例如 A(146,557)、B(1499,557)、C(1499,637)、D(146,637)。
如何使用坐标在 WPF 中绘制矩形?
Rectangle myRectangle = new Rectangle();
double rectangleHeight = RectangleHeight(146,557,1499,557,1499,637,146,637);
double rectangleWidth = RectangleWidth(146,557,1499,557,1499,637,146,637);
myRectangle.Height = rectangleHeight;
myRectangle.Width = rectangleWidth;
SolidColorBrush partiallyTransparentSolidColorBrush = new SolidColorBrush(Colors.Green);
partiallyTransparentSolidColorBrush.Opacity = 0.25;
myRectangle.Fill = partiallyTransparentSolidColorBrush;
canvas.Children.Insert(0, myRectangle);
Canvas.SetTop(myRectangle, rectangleHeight);
Canvas.SetLeft(myRectangle, rectangleWidth);
这是我获取高度和宽度的方法。
private double RectangleHeight(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8) {
int a1 = h1 - h7;
int a2 = h2 - h8;
int b1 = a1 * a1;
int b2 = a2 * a2;
double sqt1 = Math.Sqrt(b1 + b2);
return sqt1;
}
private double RectangleWidth(int w1, int w2, int w3, int w4, int w5, int w6, int w7, int w8)
{
int a1 = w3 - w1;
int a2 = w2 - w4;
int b1 = a1 * a1;
int b2 = a2 * a2;
double sqt2 = Math.Sqrt(b1 + b2);
return sqt2;
}
解决方案
您对宽度和高度的计算是错误的。对于矩形,它只是Cx - Ax
和Cy - Ay
。Top 和 Left 也不等于宽度和高度:
SolidColorBrush partiallyTransparentSolidColorBrush = new SolidColorBrush(Colors.Green);
partiallyTransparentSolidColorBrush.Opacity = 0.25;
int ax = 146, ay = 557, cx = 1499, cy = 637;
var myRectangle = new Rectangle
{
Height = cy - ay,
Width = cx - ax,
Fill = partiallyTransparentSolidColorBrush
};
Canvas.SetTop(myRectangle, ay);
Canvas.SetLeft(myRectangle, ax);
canvas.Children.Insert(0, myRectangle);
您可以使用 Polygon 而不是 Rectangle 并指定每个点而不进行任何计算:
var partiallyTransparentSolidColorBrush = new SolidColorBrush(Colors.Green);
partiallyTransparentSolidColorBrush.Opacity = 0.25;
var myRectangle = new Polygon
{
//Stroke = Brushes.Black,
//StrokeThickness = 2,
Fill = partiallyTransparentSolidColorBrush,
Points =
{
new Point(146, 557),
new Point(1499, 557),
new Point(1499, 637),
new Point(146, 637),
}
};
canvas.Children.Add(myRectangle);
使用 Polygon 还可以绘制更复杂的形状。
推荐阅读
- r - 在一个条件下保持一行数据框
- sql-server - SQL Server 中存储过程的可选参数
- python - YAML 文件参数值无效错误
- optimization - 部分字符串匹配的 BaseX 索引或查询优化
- php - 致命错误:访问未声明的静态属性(使用 realexpayments)
- c++ - 使用递归模板动态分配多维数组
- django - TemplateDoesNotExist 位于/home_page.html
- reactjs - 如何为 graphql 生成 TypeScript 定义
- aws-lambda - 从 Lambda 访问 Amazon Aurora?
- .net - TFS 2015 构建,构建代理的 GIT 同步期间出现 404 错误