c# - 从一侧缩放多边形

标签 c# algorithm math

我想让多边形(矩形)变小,我写了这个函数,可以很好地从四向减少矩形,但是当我想从矩形的一侧变小矩形时,我得到了 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/

相关文章:

c++ - 我怎样才能从 n 得到一个自次幂等于 n 的数?

java - 计算最近截面的角度

c# - 自承载 WCF 服务使用 HTTP 而不是 HTTPS

c# - WPF中UserControl中DesignWidth和Width的区别

c# - 从父对象调用方法 C# Unity3d

c# - 逻辑删除时恢复应用程序状态的默认页面

c++ - 晶格缩减

c++ - 伙伴分配算法 - 起始堆地址

c++ - R 和 C++ 中大矩阵的跟踪和逆

python - ORtools 安排学生上课时间冲突