因公司的需求,要在小程序语音房内部迭代一个真心话大冒险的功能,也等同于幸运转盘;

业务场景:

发送一个socket,拿到响应的结果,根据返回的数值开始启动幸运转盘,由于转盘上的人数不是固定的,所以要根据角度定位到每一个人x轴和y轴的坐标。

简单来说的话就是一个初中的数学题目:

已知圆心、半径、角度求圆上点的坐标,也就是初中的数学知识sin和cos,当然这种数学公式的话在伟大的JavaScript中也是有的:Math.sin()和Math.cos()

话不多说直接上代码:

<view class="bg"><view bindtap="start" class="pointer" bindtransitionend="animationend" animation="{{animationData}}"></view><view class="origin"><view wx:for="{{coordinate}}" style="top: {{item.y}}rpx; left: {{item.x}}rpx;" class="user">{{index}}</view></view>
</view>
.bg{position: relative;width: 600rpx;height: 600rpx;border-radius: 50%;background-color: aqua;
}.pointer{width: 30px;height: 30px;background-color: #333;border-radius: 50%;position: absolute;left: 270rpx;top: 270rpx;
}.pointer::after{content: ' ';width:0;height:0;border-right:12rpx solid transparent;border-left:12rpx solid transparent;border-bottom:52rpx solid #333;z-index: 10;position: absolute;left: 17rpx;top: -48rpx;
}.origin{position: relative;top: 300rpx;left: 300rpx;
}.user{width: 70rpx;height: 70rpx;background-color: darkgray;border-radius: 50%;position: absolute;
}
Page({data: {num: 11, // 圆分成多少份},onLoad() {this.setCoordinate(this.data.num, 200, -90, 35)},/*** 设置坐标* @param {圆分成多少份} num* @param {从圆心向外的半径位置} r* @param {初始角度,已x轴正半轴为起始角度0,顺时针旋转+,逆时针旋转-} initialDeg* @param {小圆的半径} s_r*/setCoordinate(num, r, initialDeg, s_r) {const coordinate = []const deg = 360 / num // 每一个间隔多少度for (let index = 0; index < num; index++) {const degItem = (deg * index) + initialDegconst x = r * Math.cos(degItem * Math.PI / 180) - s_rconst y = r * Math.sin(degItem * Math.PI / 180) - s_rcoordinate.push({x, y})}this.setData({coordinate})},// 随机一个角度setAngle() {const random = Math.floor(Math.random() * this.data.num)return random * (360 / this.data.num)},// 开始执行动画start() {if (this.data.disable) {return}this.setData({disable: true})let animation = wx.createAnimation({duration: 3000,timingFunction:'ease'})const angle = this.setAngle()animation.rotate(360*8+angle).step()this.setData({animationData: animation.export(),angle})},// 动画结束时候调用animationend() {const { angle } = this.datalet animation = wx.createAnimation({duration: 0})animation.rotate(angle).step()this.setData({animationData: animation.export()})setTimeout(() => {this.setData({disable: false})}, 200)}
})

分成11份的情况,如下图:

改变num值分成6份,如下图:

改变r值,从圆心向外的半径位置为150,如下图:

改变initialDeg值,初始角度为0,如下图:

✨原 创 不 易 , 大 佬 们 给 个 支 持 ! ! ! 

小程序转盘抽奖,已知圆心、半径、角度求圆上点的坐标相关推荐

  1. 微信小程序-转盘抽奖

    微信小程序-转盘抽奖代码: lucky-draw.wxss: .lucky_draw_zp{ width: 502rpx; height: 502rpx; margin: 0 auto; positi ...

  2. 微信小程序——转盘抽奖

    如题,该小程序为一款利用canvas实现的转盘抽奖效果,今天我就来总结一下转盘旋转具体实现原理,首先还是上图上代码(一下代码为转盘部分代码,想要查看完整代码,请移步支我的github,飞机票,点击跳转 ...

  3. 已知斜边和角度求邻边_从数学史角度看数系发展

    主要内容:主要谈数系的发展,从数系扩展或者历史角度来谈.主要涵盖:自然数.整数.有理数.无理数.代数数.超越数.实数等.各类数集应包含各类别的定义.数的性质等. 数学史的发展,伴随着数系的扩展.随着时 ...

  4. 已知圆心,半径,角度,求圆上的点坐标

    很简单一个小学算法- 圆点坐标:(x0,y0) 半径:r 角度:a0 则圆上任一点为:(x1,y1) x1 = x0 + r * cos(ao) y1 = y0 + r * sin(ao ) 转换成j ...

  5. 已知圆心,半径,角度,求圆上的点坐标。

    当需要用时才发现,初中学的东西都已经忘了,在网上搜到以下公式,需要用时也好找了. 圆点坐标:(x0,y0) 半径:r  角度:a0 则圆上任一点为:(x1,y1)  x1   =   x0   +   ...

  6. 小程序转盘抽奖,小程序抽奖

    很多地方都会用到就记录一下,有懒的到处找,可以随机,也可以从后台获取数据,改一下参数就可以用,如果帮到了你就点个赞吧 下载地址

  7. matlab已知圆心和半径怎么作圆,MATLAB中已知圆心和半径画圆

    今天在用MATLAB编程的时候,用到了已知圆心和半径,画圆的程序,上网搜了一下,主要有下面两种,在这里总结一下:(这里我都是放在函数中做的,想画多个圆的话可以加个for循环调用一下函数,或者直接用向量 ...

  8. MATLAB中已知圆心和半径画圆

    今天在用MATLAB编程的时候,用到了已知圆心和半径,画圆的程序,上网搜了一下,主要有下面两种,在这里总结一下:(这里我都是放在函数中做的,想画多个圆的话可以加个for循环调用一下函数,或者直接用向量 ...

  9. JAVA已知圆心经纬度和半径求圆周点的经纬度

    JAVA已知圆心经纬度和半径求圆周点的经纬度 项目中遇到一个需求,需要根据传入的圆心经纬度和半径参数获得圆周点的经纬度,在网上查询了很多没有找到能用的算法,从GPT中获取到了一个简洁的用java实现的 ...

最新文章

  1. Asp.net中GridView使用详解(引)【转】
  2. Java生鲜电商平台-监控模块的设计与架构
  3. java表或视图不存在_Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在...
  4. 基于matlab的对流层散射信道特性仿真,对流层散射信道建模和FPGA实现
  5. 美国运通使用AI技术检测欺诈行为 增强安全性
  6. 贵州省新农合业务系统容灾技术支撑服务项目
  7. vue实现竖式步骤条_手把手教你实现一个 Vue 进度条组件!
  8. 18_clickhouse副本同步与高可用功能验证,分布式表与集群配置,数据副本与复制表,ZooKeeper整合,创建复制表,副本同步机制,数据原子写入与去重,负载平衡策略,案例(学习笔记)
  9. 19岁白帽子通过bug悬赏赚到一百万美元--转
  10. SQL Server 2008 R2 安装时提示“Reporting Services目录数据库文件存在”
  11. C语言 vprintf 函数和 printf 函数区别 - C语言零基础入门教程
  12. Grafana文档(在Centos / Redhat上安装)
  13. OpenShift Security (5) - 评估部署中的风险
  14. 针对 VOC2007和VOC2012 的具体用法
  15. c盘存放文件夹的功能
  16. 建设医疗人工智能的“四步曲”
  17. Spring Cloud Zuul过滤器详解
  18. linux alsa 音量参数
  19. 描述性物理海洋学 --第五章学习笔记(大洋中水、盐和热收支以及风应力)
  20. 语法错误 : 缺少“;”(在“*”的前面)_学科教学不能缺少生本意识

热门文章

  1. 远程控制软件Aspia详细教程
  2. kubernetes-ETCD
  3. 网络图(单代号、双代号、时标网络图)
  4. 过河问题(图、BFS)
  5. 华科计算机学院考研专业课,华中科技大学计算机学院软件与理论考研经验
  6. VM虚拟机安装ROOT,GEANT4,Python,jupyter notebook
  7. C语言——二分法求一元三次方程的方程根
  8. CentOS安装Python3.6.5的流程指导(多坑)
  9. Python Web开发 之 学生管理系统(2)[实现筛选,搜索,分页]
  10. 用一张图片,转换mp3为mp4