有偿!昨天问了一下,还是没有解决问题,直接有偿求解。

2022-11-02 02:40:59 +08:00
 qq309187341
需要一个检测方法。
touch:是触摸点坐标( x,y )
item:是画布中的元素(含元素的,x,y,w,h,以及旋转角度 r)
iconSize:是元素周围的按钮的大小,初始为 24px ,包含了删除,旋转,缩放等等。
getTouchPos(touch,item,iconSize){}

需要通过这个方法检测到当前点击是否在元素上,如何是在元素上是否在元素的删除,旋转,缩放等按钮。不在元素上返回 false 。

难点在于元素进行旋转之后,点位也发生了变化!!!

大致样子如下图。
https://ibb.co/kGJ3bPr

发了好几次帖子,大家都只给方法,奈何数字太差,尝试了很多次都是旋转之后点位没有精确检测到。

能解决的大佬可以联系我,有偿。也可以直接贴上代码,万分感谢。发光发热!!!
3494 次点击
所在节点    Vue.js
26 条回复
qq309187341
2022-11-02 11:24:52 +08:00
@cy1027 大哥你是被人骗多了么?内心如何黑暗?我上面说的很清楚,哪位大佬直接帮我实现相关方法,私我给我代码我给他钱,也可以先加起来问问多少钱,再决定要不要帮我实现。或者好心人直接贴源码无偿,我也感谢。至于金额,能处理的人我给个一二百,也当意思意思。处理不了问个价格有什么用?你能不能处理,不能处理就看看就好。至于在这里质疑我是不是白嫖?再说了,上面除了有一个哥们贴了不完全的代码,其他人也只是给他方式而已。我也表示感谢大家能给我思路,但是我需要的是现实方法(我比较菜,没能力实现所以求助)
churchill
2022-11-02 11:43:31 +08:00
这个问题有这么纠结么,我昨天还随手写了个小示例,方法是检测线段相交
如果仅仅是要知道点在里面还是外面可以更简单

首先算出矩形的 4 个顶点坐标,如果你是自己实现的变换,那怎么算不用别人讲,如果是用了 canvas api ,那可以直接把 canvas 的矩阵拿来用 context.getTransform ,然后只需简单的做个乘法

拿到顶点坐标后,代表每条边的向量与代表顶点到检测点的向量做一个叉乘,就可以知道结果了
写成 js 代码大致这样
```
isInside = true
for (i = 0; i < vertices.length; i++) {
const v1 = vertices[i]
const v2 = vertices[(i + 1) % vertices.length]
if (v2.sub(v1).cross(p.sub(v1)) < 0) {
isInside = false ; break
}
}
```

详细的讲解看这个,拖到后面讲 cross product 的部分
https://www.bilibili.com/video/BV1X7411F744?p=2
qq309187341
2022-11-02 11:52:24 +08:00
@churchill 感谢大佬,昨天给我的 demo ,我试了一下,我转化到自己的项目上没成功,很郁闷,看不懂你的核心方式。。。不过刚才 1L 的大哥给我方法了,用正弦余弦函数处理。能满足需求了。发了 200 意思一下了。
还是感谢大佬多次给我解答。感谢
qq309187341
2022-11-02 11:54:45 +08:00
谢谢各位,热心帮助。问题已经解决了。感谢 1L 大佬帮我处理了。虽然有偿但是能处理了就可以。之后看情况把源码发出来。给以后需要的(和我一样菜的) 朋友一些参考
stein42
2022-11-02 11:55:21 +08:00
已经帮 OP 解决了,也收到了红包。
思路就是把触摸点相对于 canvas 的坐标,换回相对于元素(一个矩形)的坐标,再判断。
由于 uniapp 没有 getTransform ,需要手动推导公式了。
ActionFirst
2022-11-12 15:32:23 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/891938

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX