旋转/平移和恢复后获取画布上的位置
好吧,这变得很复杂......
给定情况:
我有一个尺寸为 800x600 的画布。
我的鼠标位于画布位置 100x200(例如)。
我保存画布状态。
现在我旋转并平移画布,绘制一个正方形。
我恢复画布状态。
有什么方法可以确定我的鼠标是否位于方块上?
我想我也必须向相反的方向平移/旋转我的鼠标位置,但我该怎么做呢?
Okay, this is getting complicated...
Given situation:
I have a canvas with the dimensions of 800x600.
My mouse is at canvas position 100x200 (for example).
I save my canvas state.
Now I rotate and translate the canvas, I draw a square.
I restore my canvas state.
Is there any way to determine if my mouse is over the square?
I think I would have to translate/rotate my mouse position as well - in the opposite direction, but how would I do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以通过递归应用以下公式来获取对象的世界位置/旋转:
javascript 实现将是:
使用这些对象尝试一下:
不久之后您就会想要计算两个对象之间的最短角度,如果您获取两个对象之间的 deltaX (x2-x1) 和 deltaY (y2-y1) 您可以使用此函数获取角度:
从长远来看,最好使用矩阵来学习。获得世界 pos/rot 的等价物是一个世界矩阵。这里有一些关于矩阵的好信息(在 SVG 文档中,但它不相关): http ://www.w3.org/TR/SVG/coords.html#NestedTransformations
这是使用矩阵(以及 gl-matrix lib https://github.com/toji/gl-matrix):
哦,我忘了,现在终于到了注册一次单击,您只需获取鼠标的屏幕坐标并将它们与对象位置+画布视口偏移进行比较。
You can get hold of an objects world position/rotation by recursively applying this formula:
A javascript implementation would be:
Try it out with these objects:
It won't be long before you want to calculate the shortest angle between two objects, if you get the deltaX (x2-x1) and deltaY (y2-y1) between the two objects you can get the angle with this function:
In the long run it's better to learn using matrices instead. The equivalence of getting the world pos/rot is a world matrix. Here's some good info about matrices (in the SVG doc, but it's not relevant): http://www.w3.org/TR/SVG/coords.html#NestedTransformations
This is how you would do it with matrices (and the gl-matrix lib https://github.com/toji/gl-matrix):
Oh, i forgot, now to finally register a click you just get the screen coordinates of the mouse and compare them to the objects position + the canvas viewport offset.
是的,您必须平移鼠标坐标或保留形状的第二组坐标。我建议保留第二组坐标,因为移动鼠标的次数比变换对象的次数要多。 这样的对象
尝试使用像Box
Yes you have to either translate the mouse coordinates or retain a second set of coordinates for your shape. I recommend keeping a second set of coordinates as you will move the mouse more times than you transform the object. Try using an object like so
Box