gpt4 book ai didi

c# - 从一侧缩放多边形

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:56:36 26 4
gpt4 key购买 nike

我想让多边形(矩形)变小,我写了这个函数,可以很好地从四向减少矩形,但是当我想从矩形的一侧变小矩形时,我得到了 Nan 值。

enter image description here

float accuracy =0.95f;
PointF pCenter = new PointF();
PointF[] lot = new PointF[4];
lot[0] = new PointF(4.6f,8.9f);
lot[1] = new PointF(4.6f, 3.2f);
lot[2] = new PointF(1.209f, 3.2f);
lot[3] = new PointF(1.209f, 8.92f);
pCenter.X = (lot[0].X + lot[1].X) / 2;
pCenter.Y = (lot[0].Y + lot[1].Y) / 2;
//IF I write This it Works Fine
//pCenter.X = (lot[0].X + lot[1].X+ lot[2].X+ lot[3].X) / 4;
//pCenter.Y = (lot[0].Y + lot[1].Y+ lot[2].Y+ lot[3].Y) / 4;
float dx;
float dy;
for (int ii = 0; ii < 4; ii++)
{
var p = lot[ii];
dx = p.X - pCenter.X;
dy = p.Y - pCenter.Y;
float add = dx * accuracy;
float x = pCenter.X + add;
float y = pCenter.Y + dy * (x - pCenter.X) / dx;
lot[ii] = new PointF(x, y);
}

最佳答案

要按照您的建议缩放矩形,不需要循环。也没有必要计算中心。例如,您可以使用以下函数。我已经按照与您相同的顺序枚举了矩形的点(p0、p1、p2 和 p3):

private void scaleRectangle(Rectangle r, float scale) {

float width = r.p1.X - r.p2.X;

r.p2.X = r.p1.X - width * scale;
r.p3.X = r.p0.X - width * scale;
}

关于c# - 从一侧缩放多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34725275/

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