MFC-OffsetRect平移矩形

Posted 天子骄龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC-OffsetRect平移矩形相关的知识,希望对你有一定的参考价值。

 

    HDC hdc = ::GetDC(m_hWnd);
    RECT rect =  10,10,50,100 ;
    HBRUSH hbr;
    hbr = CreateSolidBrush(RGB(0, 0, 255));
    SelectObject(hdc, hbr);

    int f = FrameRect(hdc, &rect, hbr);//绘制矩形边框
    BOOL b=OffsetRect(&rect,90,0);//平移矩形
    /*
    参数1:LPRECT lprc  指向RECT 结构的指针
    参数2:int dx     指定的矩形左右移动的量。当向左移动的时候,这个参数必须是一个负值
    参数3:int dy     指定的矩形上下移动的量。当向上移动的时候,这个参数应该是一个负值
    
    返回值:如果函数成功,返回非零值;否则返回零值
    
    */

    f = FrameRect(hdc, &rect, hbr);

    DeleteObject(hbr);
    ::ReleaseDC(m_hWnd, hdc);

 

 

 

 

 

HTML5 Canvas 中旋转矩形内的鼠标位置

【中文标题】HTML5 Canvas 中旋转矩形内的鼠标位置【英文标题】:Mouse position within rotated rectangle in HTML5 Canvas 【发布时间】:2012-03-01 09:37:18 【问题描述】:

html5 画布中矩形的旋转以弧度存储。为了确定随后的鼠标点击是否在任何给定的矩形内,我将鼠标 x 和 y 平移到矩形的旋转原点,将旋转的反向应用于鼠标坐标,然后将鼠标坐标平移回来。

这根本行不通 - 鼠标坐标没有按预期转换(也就是说,在旋转矩形的可见边界内单击时,鼠标坐标不在原始矩形的边界内),并且针对矩形边界的测试失败.鼠标点击的检测仅在矩形的最中心区域内起作用。请查看下面的代码 sn-p 并告诉我您是否可以看到这里有什么问题。

 // Our origin of rotation is the center of the rectangle
 // Our rectangle has its upper-left corner defined by x,y, its width
 // defined in w, height in h, and rotation(in radians) in r.  
var originX = this.x + this.w/2, originY = this.y + this.h/2, r = -this.r;

 // Perform origin translation
mouseX -= originX, mouseY -= originY;
// Rotate mouse coordinates by opposite of rectangle rotation
mouseX = mouseX * Math.cos(r) - mouseY * Math.sin(r);
mouseY = mouseY * Math.cos(r) + mouseX * Math.sin(r);
// Reverse translation
mouseX += originX, mouseY += originY;

// Bounds Check
if ((this.x <= mouseX) && (this.x + this.w >= mouseX) && (this.y <= mouseY) && (this.y + this.h >= mouseY))
    return true;

【问题讨论】:

这个问题同:***.com/questions/28706989/… 【参考方案1】:

经过一些进一步的工作,得出了以下解决方案,我想我会在这里为将来可能需要它的任何人转录:

// translate mouse point values to origin
    var dx = mouseX - originX, dy = mouseY - originY;
    // distance between the point and the center of the rectangle
    var h1 = Math.sqrt(dx*dx + dy*dy);
    var currA = Math.atan2(dy,dx);
    // Angle of point rotated around origin of rectangle in opposition
    var newA = currA - this.r;
    // New position of mouse point when rotated
    var x2 = Math.cos(newA) * h1;
    var y2 = Math.sin(newA) * h1;
    // Check relative to center of rectangle
    if (x2 > -0.5 * this.w && x2 < 0.5 * this.w && y2 > -0.5 * this.h && y2 < 0.5 * this.h)
        return true;
    

【讨论】:

以上是关于MFC-OffsetRect平移矩形的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollview 子视图在缩放后无法识别平移手势

HTML5 Canvas 中旋转矩形内的鼠标位置

WPF 画一个3D矩形并旋转

shader编程-二维空间中使用矩阵实现物体的旋转缩放平移变换(WebGL-Shader开发基础03)

shader编程-二维空间中使用矩阵实现物体的旋转缩放平移变换(WebGL-Shader开发基础03)

平移和缩放图像