请问如果计算一个图片,在旋转后这张图片所在界面的区域是多少?

开发环境: cocos2d-x 3.3rc0 lua

请问如果计算一个图片,在旋转后这张图片所在界面的区域是多少?
有一个长方形图片, 把这张图片添加到层中时 可以计算出 当前的图片区域。 起始原点 宽度 和 高度
但是当这个长方形 旋转了一定的角度后 例如: 旋转(50度)后
如何去计算 图片的所在层中的区域呢? 起始原点 发生变化 是如何计算呢?

用三角函数算吧

最简单的方法在图片四个定点加入ImageView,调用getWorldPosition方法,就不用在计算了。。。简单方便安全无痛苦!

你好! 你的意思是算出 图片上的四个点后 加入到 ImageView中 在调用 getWorldPosition方法。我在想如果 已经知道 图片旋转后的四个点的位置 不就也就知道 图片的区域了吗?

我的意思是在图片里面 4个端点里面添加 想这样子:

图片->setAnchorPoint(Point(0,0));

up_left=cocos2d::ui::ImageView::create();
up_right=cocos2d::ui::ImageView::create();
down_left=cocos2d::ui::ImageView::create();
down_right=cocos2d::ui::ImageView::create();

因为图片宽高都已经知道,调一下位置只要往图片里面加就可以了

up_left->setPosition(Point(0,图片.height));
up_right->setPosition(Point(图片.width,图片.height));
down_left->setPosition(Point(0,0));
down_right->setPosition(Point(图片.width,0));


图片->addChild(up_left);
图片>addChild(up_right);
图片->addChild(down_left);
图片->addChild(down_right);

up_left->getWorldPosition(),就OK了

多谢 @kubixiake 能过你方法 已经获了 旋转后的图片坐标点。

在请教一个问题 如何检测 一个精灵移动到 这个旋转后的图片所在的区域内。

我也想过 可以通过 rect intersectsRect 方法 但是 参数为 图片的 (原点 + 图片的宽度 与 图片的高度) 这个方法好像只能检测不能旋转的图片

但旋转后的图片是不能这样计算的。

请问有什么好的方法来检测 一个精灵移动到了 这个旋转后的图片所在的区域内呢?

物理引擎吧

将精灵的坐标点转换打图片父节点的nodespace,参见convertToNodeSpace
然后判断得到的坐标点是否在图片矩形内

1,确定 旋转时的锚点,

假如我们手上有一张纸,将其看成一个矩形,可能我们让其 以 左上角旋转,

也有可能我们让其以 自己的几何中心点旋转,

无论如何旋转,此时,矩形的四个顶角位置与 锚点的相对位置是 可以确定的。

2, 确定 旋转的角度,

此时,我需要实现一个方法,

计算出某个坐标相对于(0,0)点旋转后的新坐标。

CCPoint newPoint = JarodGameTools::getRotatePoint(ccp(0,-40),JarodGameTools::getRadian(所需旋转的角度));

这里有点复杂,我们一步一步来看,

首先,ccp(0,-40) 表示的是,某个点现对于 旋转时锚点 的相对位置。

getRadian函数用来将 角度转化为弧度。

getRotatePoint用来计算某一点逆时针旋转一定角度后的新坐标。

下面是具体实现的源代码:

CCPoint JarodGameTools:: getRotatePoint(const CCPoint& pointA,float rotateAngle)
{

float xTemp = pointA.x*cos(rotateAngle)-pointA.y*sin(rotateAngle);
float yTemp = pointA.x*sin(rotateAngle)+pointA.y*cos(rotateAngle);

return ccp(xTemp,yTemp);

}

float JarodGameTools:: getRadian(float angle)
{
return CC_DEGREES_TO_RADIANS(angle);
}

这样,四个顶点就确定了。

3.知道了某个锚点和旋转角度,

此时,判断一点是否在矩形内,可以让其按 锚点 反方向旋转,

此时,问题变成了 一个点是否在一个矩形范围内,

判断 X,Y的坐标和原始矩形的范围就可以了。

4.上面的是我胡编的。