AutoJs学习-传感器图像

往期文章分享
  • 点击跳转=>《导航贴》- Unity手册,系统实战学习
  • 点击跳转=>《导航贴》- Android手册,重温移动开发

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

在这里插入图片描述

本文约5千字,新手阅读需要7分钟,复习需要2分钟收藏随时查阅不再迷路

文章目录

    • 👉关于作者
    • 👉实践过程
    • 👉其他

👉实践过程

"ui";/***高级的图像缩放查看功能。(不同往日)*对于显示部分的操作:可以用最多三个手指来调节图像的显示。-超过三个手指的时候,图像将会回归原状。-有三指截屏功能的手机,或者其他三指的功能。在三指同时按下时不能对图像进行调节。**/
ui.layout(<vertical bg="{{colors.toString(colors.GRAY)}}" gravity="center"><text id="text" w="*" text="重力传感器" gravity="center"/><canvas id="canvas" w="*" layout_weight="1"/><text id="text1" w="*" gravity="center"/><list id="list" w="*"h="200dp" bg="#40000000" gravity="center"><vertical w="*"  margin="5"><text w="*" text="{{name}}" gravity="center" /><text w="*" text="{{value}}" gravity="center"/></vertical></list></vertical>
);threads.start(function() {//console.show();
});var storage = storages.create("传感器图像");
var sensorName = storage.get("sensor", {value: "gyroscope",name: "陀螺仪传感器"
});//sleep(1000);
events.on("exit", function() {storage.put("sensor", sensorName);
});//importClass(android.graphics.Paint);
//importClass(android.graphics.Canvas);
//importClass(android.graphics.Bitmap);
var SensorAry = new Array;
//忽略不支持的传感器,即使有传感器不支持也不抛出异常
//sensors.ignoresUnsupportedSensor = true;
var sensorsList = [{value: "accelerometer",name: "加速度传感器"},{value: "orientation",name: "方向传感器"},{value: "gyroscope",name: "陀螺仪传感器"},{value: "magnetic_field",name: "磁场传感器"},{value: "gravity",name: "重力传感器"},{value: "linear_acceleration",name: "线性加速度传感器"},{value: "ambient_temperature",name: "环境温度传感器"},{value: "light",name: "光线传感器"},{value: "pressure",name: "压力传感器"},{value: "proximity",name: "距离传感器"},{value: "relative_humidity",name: "湿度传感器"}
];ui.list.setDataSource(sensorsList);
ui.text.setText(String(sensorName.name));function SensorFun() {var ary = new Array;log(arguments);for (var i = 0; i < 7; i++) {if (typeof arguments[i] == "number") {ary.push(arguments[i]);};};ui.run(() => {ui.text1.setText(String(ary.map(function(a) {return Math.round(a * 10) / 10}).join("_")));});SensorAry.push(ary);if (SensorAry.length >= 500) {for (var i = 0; i < 5; i++) {SensorAry.shift();};};
};//传感器
var sensor = sensors.register(sensorName.value, sensors.delay.ui);
if (sensor) {sensor.on("change", SensorFun);
} else {toastLog("不支持此传感器");
};ui.list.on("item_click", function(item, i, itemView, listView) {//传感器var newsensor = sensors.register(item.value, sensors.delay.ui);if (newsensor) {ui.run(() => {ui.text.setText(item.name);});sensors.unregister(sensor);sensor = newsensor;sensorName = item;sensor.on("change", SensorFun);} else {toastLog("不支持此传感器");};});var paint = new android.graphics.Paint;
paint.setStrokeWidth(5);
paint.setTextAlign(Paint.Align.LEFT); //写字左var ASX = new XYToMatrix(null, 3);var rainbowColor = [{: "赤色",: [255, 0, 0]},{: "橙色",: [255, 165, 0]},{: "黄色",: [255, 255, 0]},{: "绿色",: [0, 255, 0]},{: "青色",: [0, 127, 255]},{: "蓝色",: [0, 0, 255]},{: "紫色",: [139, 0, 255]}
];ui.canvas.on("draw", function(canvas) {var w = canvas.getWidth() - 50,h = canvas.getHeight();canvas.drawARGB(255, 127, 127, 127);canvas.setMatrix(ASX.matrix);var scale = ASX.getScaling();//得到缩放比例。paint.setColor(colors.BLACK);canvas.drawLine(w, h / 2 - h / 2 / scale, w, h / 2 + h / 2 / scale, paint);canvas.drawLine(w, h / 2, w - w / scale, h / 2, paint);var x = w,y = h * 0.5;var sw = 7 / scale,sh = 25;var ic = 1 / scale;var fw = 25 / scale;var size = 30 / scale;paint.setTextSize(size);paint.setStrokeWidth(5 / scale); //边缘宽度  //绘制刻度图for (var i = -fw; i <= fw; i += ic) {var ia = Math.round(Math.round(i * (1 / ic)) / (1 / ic));var hy = y - ia * sh;paint.setARGB(31, 0, 0, 0);canvas.drawLine(w - w / scale, hy, w, hy, paint);paint.setARGB(127, 0, 0, 0);//paint.setStrokeWidth(1); //边缘宽度  paint.setStyle(Paint.Style.FILL); //实心样式  canvas.drawText(String(ia), w, hy + 0.365 * size, paint);};//paint.setStrokeWidth(5); //边缘宽度  //绘制折线图。for (var i = 1; i <= SensorAry.length; i++) {var ary = SensorAry[SensorAry.length - i];var bary = SensorAry[SensorAry.length - i - 1];var X = x - i * sw;var bX = x - (i + 1) * sw;if (bary) {for (var ii = 0; ii < ary.length; ii++) {var cy = y - ary[ii] * sh;var bcy = y - bary[ii] * sh;if (bcy) {paint.setColor(colors.rgb.apply(colors, rainbowColor[ii].));canvas.drawLine(inon(X, 0, w), inon(cy, 0, h), inon(bX, 0, w), inon(bcy, 0, h), paint);};};};};
});//可以用两只手指移动缩放图像。
ui.canvas.setOnTouchListener(ASX.touchListener);function inon(a, b, c) {return (a >= b || a < c) ? a : (a >= b ? c - 1 : b);
};function getsd(s, ary) {var sum = weiyi(ary);var S = (s / sum) || 0;for (var i = 0; i < ary.length; i++) {ary[i] = ary[i] * S;};return ary;
};function weiyi(ary) {var sum = 0;for (var i = 0; i < ary.length; i++) {sum += Math.pow(ary[i], 2);};return Math.sqrt(sum);
};function kdfx(Y) {var x = Math.cos(Y % 360 / 360 * 2 * Math.PI);var y = Math.sin(Y % 360 / 360 * 2 * Math.PI);return [x, y];
};function ydfx(ary) {var ary = getsd(1, ary);var x = ary[0],y = ary[1];var Y = Math.asin(y) / (2 * Math.PI) * 360;if (x < 0) {Y = 180 - Y;};return Y;
};/*
function eraseColor() {
void eraseColor(int)
}*/function 反色(color) {return (-1 - colors.argb(0, colors.red(color), colors.green(color), colors.blue(color)));
};function XYToMatrix(matrix, maxPoints) {//通过多点触控来设置matrix从而来缩放图像。//第2个参数。最大的手指数量。手指数量超过之后matrix将初始化。this.matrix = matrix || new android.graphics.Matrix;this.invertMatrix = new android.graphics.Matrix;this.matrix.invert(this.invertMatrix);this.getScaling = function(ary) {//获取缩放比例。ary = Array.isArray(ary) ? ary : [0, 0, 100, 100];try {var Ary = this.matrixPoints(this.matrix, ary);return this.weiyi([Ary[2] - Ary[0], Ary[3] - Ary[1]]) / this.weiyi(ary);} catch (e) {toastLog(e);};};this.maxPoints = maxPoints || 2;this.maxPointsListener = function() {this.matrix = new android.graphics.Matrix;this.invertMatrix = new android.graphics.Matrix;this.matrix.invert(this.invertMatrix);};this.Touch = {Matrix: this.matrix,PointStart: new Array,PointCurrent: new Array,};this.touchListener = new android.view.View.OnTouchListener((view, event) => {try {let W = view.getWidth();let H = view.getHeight();let PC = event.getPointerCount();switch (event.getActionMasked()) {case event.ACTION_MOVE:try {for (let i = 0; i < PC; i++) {let id = event.getPointerId(i);let x = event.getX(i);let y = event.getY(i);this.Touch.PointCurrent[i * 2] = x;this.Touch.PointCurrent[i * 2 + 1] = y;};//记录当前各手指坐标信息。if (PC > this.maxPoints) { //手指数大于4个虽然记录坐标信息,但是不进行矩阵操作。this.maxPointsListener(view, event);break;};let Matrix = new android.graphics.Matrix();Matrix.setPolyToPoly(this.Touch.PointStart, 0, this.Touch.PointCurrent, 0, PC > 4 ? 4 : PC);this.matrix = new android.graphics.Matrix();this.matrix.setConcat(Matrix, this.Touch.Matrix);//进行矩阵运算并刷新矩阵。this.matrix.invert(this.invertMatrix);//反矩阵} catch (e) {throw "MOVE " + e;};break;case event.ACTION_CANCEL:log("CANCEL");toast("触摸被系统拦截\n可能是三指截屏等功能");this.Touch.PointStart = new Array;this.Touch.PointCurrent = new Array;break;case event.ACTION_OUTSIDE:log("OUTSIDE");break;default:let I = Math.floor(event.getAction() / 256);let ID = event.getPointerId(I);let X = event.getX(I);let Y = event.getY(I);switch (event.getActionMasked()) {case event.ACTION_DOWN:try {log("down");//当有新的手指按下时使坐标差为零。//开始新的多指矩阵运算方式this.Touch.PointStart.splice(I * 2, 0, X, Y);this.Touch.PointCurrent.splice(I * 2, 0, X, Y);this.Touch.Matrix = this.matrix;//log(this.Touch.Matrix);} catch (e) {throw "DOWN " + e;};break;case event.ACTION_UP://最后一个手指抬起。log("up");this.Touch.PointStart = new Array;this.Touch.PointCurrent = new Array;break;case event.ACTION_POINTER_DOWN:log("POINTER_DOWN");try {//当有新的手指按下时使坐标差为零。//开始新的多指矩阵运算方式this.Touch.PointStart.splice(I * 2, 0, X, Y);this.Touch.PointCurrent.splice(I * 2, 0, X, Y);//获取点的总数量。this.Touch.Matrix = this.matrix;for (let i = 0; i < PC; i++) {this.Touch.PointStart[i * 2] = this.Touch.PointCurrent[i * 2];this.Touch.PointStart[i * 2 + 1] = this.Touch.PointCurrent[i * 2 + 1];};//保存坐标的数组。if (PC > this.maxPoints) { //手指数大于4个化为原始矩阵虽然记录坐标信息,但是不进行矩阵操作。this.maxPointsListener(view, event);break;};let Matrix = new android.graphics.Matrix();Matrix.setPolyToPoly(this.Touch.PointStart, 0, this.Touch.PointCurrent, 0, PC > 4 ? 4 : PC);this.matrix = new android.graphics.Matrix();this.matrix.setConcat(Matrix, this.Touch.Matrix);//进行矩阵运算并刷新矩阵。this.matrix.invert(this.invertMatrix);//反矩阵} catch (e) {throw "P_DOWN " + e;};break;case event.ACTION_POINTER_UP:log("POINTER_UP");try {this.Touch.Matrix = this.matrix;for (let i = 0; i < PC; i++) {this.Touch.PointStart[i * 2] = this.Touch.PointCurrent[i * 2];this.Touch.PointStart[i * 2 + 1] = this.Touch.PointCurrent[i * 2 + 1];};this.Touch.PointStart.splice(I * 2, 2);this.Touch.PointCurrent.splice(I * 2, 2);} catch (e) {throw "P_UP " + e;};break;};};} catch (e) {throw "imgTouch: " + e;};return true;});this.matrixPoints = function(matrix, ary) {//通过矩阵运算坐标数组。但是需要转换为浮点数组。var ary = this.toJavaArray("float", ary);matrix.mapPoints(ary);return this.toJsArray(ary);};this.toJavaArray = function(type, ary) {//var Ary = java.lang.reflect.Array.newInstance(		java.lang.Float.TYPE, 4);var Ary = util.java.array(type, ary.length);for (let i in ary) {Ary[i] = ary[i];};return Ary;};this.toJsArray = function(ary) {var Ary = new Array(ary.length);for (let i in ary) {Ary[i] = ary[i];};return Ary;};this.getsd = (s, ary) => {var sum = this.weiyi(ary);var S = (s / sum) || 0;for (var i = 0; i < ary.length; i++) {ary[i] = ary[i] * S;};return ary;};this.weiyi = function(ary) {var sum = 0;for (var i = 0; i < ary.length; i++) {sum += Math.pow(ary[i], 2);};return Math.sqrt(sum);};this.kdfx = function(Y) {var x = Math.cos(Y % 360 / 360 * 2 * Math.PI);var y = Math.sin(Y % 360 / 360 * 2 * Math.PI);return [x, y];};this.ydfx = (ary) => {var ary = this.getsd(1, ary);var x = ary[0],y = ary[1];var Y = Math.asin(y) / (2 * Math.PI) * 360;if (x < 0) {Y = 180 - Y;};return Y;};};

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32375.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度剖析钓鱼网站域名识别工具dnstwist

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

ASX负责人表示新的DLT系统可以节省数十亿美元

点击上方 “蓝色字” 可关注我们&#xff01; 暴走时评&#xff1a; 澳大利亚证券交易所首席执行官周四宣布&#xff0c;使用分布式账本取代其结算系统可以节省230亿美元。交易所运营商ASX Limited的董事总经理兼首席执行官Dominic Stevens解释了如何使用分布式账本技术&#x…

asx文件的使用

网上常见的歌曲播放列表 < ASX version "3.0" > < Title > 网站标题 </ Title > < Entry > < Ref href "我是你的白雪公主.mp3" /> < Title > 我是你的白雪公主 </ Title > < Author > 我制作的 </ …

构建股票交易平台专业术语

Trade&#xff1a;交易&#xff1b;发生时机&#xff1a;当卖家同意以某个特定价格转移一定数量的股票&#xff08;或有价证券&#xff09;所有权给买家 Orders&#xff1a;买卖盘&#xff1b;买家和卖家如何实现Trade&#xff08;交易&#xff09;&#xff0c;这就需要一个中心…

Youtube ASX Portfolio的视频笔记 What is a Quant? - Financial Quantitative Analyst

What is a Quant? - Financial Quantitative Analyst - YouTube youtube 上搜 option pricing 很多讲解 Stochastic Calculus的 In this video we discuss what a Financial Quantitative Analyst is and does! A Quant for short is someone who has deep knowledge of fin…

下载.asx(转)

下载.asx 其中一段视频的地址&#xff1a; http://www.whitehouse.gov/news/r ... 0070215-1.wm.v.html 不过你在页面播放机查看媒体属性时&#xff0c;看到的是—— http://mfile.akamai.com/5913/wmv ... 02/20070215-1.v.asx 这个地址很奇怪。 首先搞清&#xff1a;as…

股票相关的代码

股票相关的代码 exchangeCD 交易所识别码&#xff0c;参考点击打开链接 securityID 证券代码&#xff0c;格式是“数字.交易所代码”&#xff0c;如000001.XSHG ticker 证券6位代码&#xff0c; 如‘000001 assetClass 证券类型&#xff0c;可供选择类型&#xff1a;E 股票…

ChatGPT:智能伙伴助力你的iPhone体验

在智能手机的时代&#xff0c;我们几乎可以通过手机应用解决任何问题。随着人工智能的迅速发展&#xff0c;我们的手机也能变得更智能、更贴心。今天&#xff0c;我要向大家推荐一款令人惊叹的iOS应用——ChatGPT。ChatGPT是由OpenAI开发的一款基于GPT-3.5架构的智能语言模型。…

ChatGPT统计“一到点就下班”的人数

ChatGPT统计“一到点就下班”的人数 1、到点下班 Chatgpt统计各部门F-D级员工到点下班人数占比&#xff0c;是在批评公司内部存在到点下班现象。 根据图片&#xff0c;该占比的计算方法是&#xff1a;最后一次下班卡在17:30-17:40之间&#xff0c;且1-5月合计有40天以上的人…

chatgpt赋能python:如何使用Python在SEO领域中获得副业

如何使用Python在SEO领域中获得副业 随着互联网的日益普及&#xff0c;越来越多的人开始加入搜索引擎优化&#xff08;SEO&#xff09;行业。尽管这是一个竞争激烈的行业&#xff0c;但是有许多机会可以在其中发现业余收入&#xff0c;利用Python编程语言可以使你更有竞争力。…

chatgpt赋能python:用Python做些什么副业?

用Python做些什么副业&#xff1f; 介绍 Python是一种非常流行的高级编程语言&#xff0c;它被广泛用于数据分析、网络爬虫、机器学习和人工智能等领域。但是&#xff0c;Python也可以用于一些副业&#xff0c;比如SEO&#xff08;搜索引擎优化&#xff09;。在本文中&#x…

找到用ChatGPT+爬虫搞钱的新渠道,我先冲了!

今年真是太科幻了&#xff0c;各路令人赞叹的AI产品接连问世&#xff0c;感觉幻想过的未来已在眼前。就与多年前移动互联网的普及一样&#xff0c;我们正处于AI改变世界的前夜。 在众多优秀的人工智能产品中&#xff0c;以ChatGPT最为火爆&#xff01;在OpenAI为其推出了GPT-4…

数据分析实战——货币分析与预测

目录 一、比特币分析与预测 1.前置准备 2.比特币价格变化趋势分析 3.稳定性检测与时间序列检测 4.数据变化 5.模型分析 6.残留物分析 7.预测 二、参考资料 总结 梗概 本篇博客主要通过几个实例&#xff08;不断更新&#xff0c;欢迎关注&#xff01;&#xff09;实践…

Chromeedge好用扩展插件分享

Infinity 楼主使用目前最好用的主题&#xff0c;[下载链接] 让浏览器页面像手机App一样展示&#xff0c;界面清晰&#xff0c;还可以自定义图标和名称。支持移动和PC&#xff08;win/mac等&#xff09; Adblock &Adblock Plus 网页拦截好助手 NeatDownloadManager 页…

Edge的扩展插件在chrome里面使用

国内 edge 浏览器扩展是城市正常访问的&#xff0c;扩展也是特别丰富的&#xff0c;那么使用 Edge 下载扩展安装在 chrome 中使用 打开 edge 浏览器&#xff0c;点击… 点 ----- 扩展 点击扩展观看里 3. 按以下只是操作 打开 edge 浏览器扩展市场&#xff0c;下载想要的插…

如何将egde的拓展(插件迁移到谷歌) (谷歌 edge拓展互用)

首先我们在国内是不能正常的在谷歌浏览器进行下载插件的 呢我们如果想要在谷歌使用插件怎么办呢 这个是edge的插件安装目录 一般情况下都是edge迁移到谷歌吧 谷歌的目录我就懒得找了 需要的直接百度吧 C:\Users\自己的用户名\AppData\Local\Microsoft\Edge\User Data\Default\…

WeTab拓展(整合GPT)——Edge浏览器新建标签页添加和使用教程

目录 1.获取 2.启用/禁用WeTab 3.使用 4.其他 1.获取 1.1找到电脑中的Edge浏览器并打开 1.2在新建的标签页中搜索“WeTab”->找到WeTab官网->点击进入 地址&#xff1a;WeTab 新标签页 1.3点击Edge 1.4点击方框获取&#xff08;我已经获取&#xff0c;此处显示为删除…

产业分析:2023中国保险发展报告

导读&#xff1a; 2023年&#xff0c;受多种因素影响&#xff0c;中国保险市场呈现出一些变化。但总体上看&#xff0c;保险业仍维持着稳步上升的趋势。此外&#xff0c;在未来的发展中&#xff0c;保险业将从服务、营销、产品、渠道等方面进行转型&#xff0c;以适应市场需求&…

2023年中国信创产业研究报告

导读&#xff1a; 目前&#xff0c;信创产业已经从“试点实践期”进入到“规模化推广期”的关键阶段&#xff0c;产业需求正在全面打开&#xff0c;市场订单正在井喷式增长&#xff0c;产业红利预计将会持续到2027年前后。本报告聚焦信创&#xff0c;综合分析产业的发展历程、现…

2023中国半导体投资深度分析

导读&#xff1a; 《报告》旨在从国家经济及产业发展的战略入手&#xff0c;分析半导体器件和集成电路专用设备行业未来的市场走向&#xff0c;挖掘半导体器件和集成电路专用设备行业的发展潜力&#xff0c;预测半导体器件和集成电路专用设备行业的发展前景&#xff0c;助力半导…