栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

检查相交矩形的更快方法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

检查相交矩形的更快方法?

我倾向于将矩形存储为min x,min y,max x和max y。然后当发生重叠时

r1.maxX > r2.minX &&r1.minX < r2.maxX &&r1.maxY > r2.minY &&r1.minY < r2.maxY

如果它们重叠,则交点定义为

r3.minX = max(r1.minX, r2.minX);r3.minY = max(r1.minY, r2.minY);r3.maxX = min(r1.maxX, r2.maxX);r3.maxY = min(r1.maxY, r2.maxY);

如果它们具有相同的边界,则应根据您是否认为它们重叠来进行一些注意。我使用了严格的不等式,这意味着重叠的边界不算作重叠。假设您使用的是整数(因此边界的宽度为1),则我假设您确实希望将重叠边界视为重叠。我会做类似的事情:

public class Rect {    public int minX;    public int minY;    public int maxX;    public int maxY;    public Rect() {}    public Rect(int x, int y, int w, int h) {        this.minX = x;        this.minY = y;        this.maxX = x + w -1;        this.maxY = y + h -1;    }    public boolean Intersect(Rect r) {        return this.maxX >= r.minX &&    this.minX <= r.maxX &&    this.maxY >= r.minY &&    this.minY <= r.maxY;       }    public Rect GetIntersection(Rect r) {        Rect i = new Rect();        if (this.Intersect(r)) { i.minX = Math.max(this.minX, r.minX); i.minY = Math.max(this.minY, r.minY); i.maxX = Math.min(this.maxX, r.maxX); i.maxY = Math.min(this.maxY, r.maxY);        }        return i;          }   public int GetWidth() {       return this.maxX - this.minX + 1;      }    public int GetHeight() {        return this.maxY - this.minY + 1;       }    public void SetPosition(int x, int y) {        int w = this.GetWidth();        int h= this.GetHeight();        this.minX = x;        this.minY = y;        this.maxX = x + w -1;        this.maxY = y + h -1;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/574242.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号