常用数学公式

简介: 牙叔教程 简单易懂

牙叔教程 简单易懂


直线两点式转一般式

function getLineGeneralEquationFromTwoPoint(point1, point2) {
  let x1 = point1.x;
  let y1 = point1.y;
  let x2 = point2.x;
  let y2 = point2.y;
  let a = y2 - y1;
  let b = x1 - x2;
  let c = x2 * y1 - x1 * y2;
  return {
    a: a,
    b: b,
    c: c,
  };
}


两条直线的交点

function getFocusCoordinatesOfTwoLines(line1, line2) {
  var x1 = line1.x1;
  var y1 = line1.y1;
  var x2 = line1.x2;
  var y2 = line1.y2;
  var x3 = line2.x1;
  var y3 = line2.y1;
  var x4 = line2.x2;
  var y4 = line2.y2;
  var x =
    ((x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4)) /
    ((x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4));
  var y =
    ((x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4)) /
    ((x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4));
  return { x: x, y: y };
}


线段延长后的坐标计算

function extendEndPoint(startPoint, endPoint, distance) {
  var A = [startPoint.x, startPoint.y];
  var B = [endPoint.x, endPoint.y];
  // 横坐标差, 纵坐标差
  var aToB = [B[0] - A[0], B[1] - A[1]];
  // A点到B点的线段长度
  var aToBDistance = Math.sqrt(aToB[0] * aToB[0] + aToB[1] * aToB[1]);
  // 一份有多长
  // 横坐标一份有多长
  // 纵坐标一份有多长
  var atoBNormalization = [aToB[0] / aToBDistance, aToB[1] / aToBDistance];
  // 延长 distance 个像素就乘以 distance, 加上终点
  var newEndPoint = {
    x: atoBNormalization[0] * distance + B[0],
    y: atoBNormalization[1] * distance + B[1],
  };
  return newEndPoint;
}


已知三个点, 求夹角

下面是求角A, 返回值是角度

function getAngle(pointA, pointB, pointC) {
  var lengthAB = Math.sqrt(Math.pow(pointA.x - pointB.x, 2) + Math.pow(pointA.y - pointB.y, 2)),
    lengthAC = Math.sqrt(Math.pow(pointA.x - pointC.x, 2) + Math.pow(pointA.y - pointC.y, 2)),
    lengthBC = Math.sqrt(Math.pow(pointB.x - pointC.x, 2) + Math.pow(pointB.y - pointC.y, 2));
  var cosA = (Math.pow(lengthAB, 2) + Math.pow(lengthAC, 2) - Math.pow(lengthBC, 2)) / (2 * lengthAB * lengthAC);
  var angleA = Math.round((Math.acos(cosA) * 180) / Math.PI);
  return angleA;
}
let arr = [
  { x: 1, y: 0 },
  { x: 0.5, y: 1 },
  { x: 0, y: 0 },
];
let r = getAngle(arr[0], arr[1], arr[2]);
console.log(r);


已知点和直线, 求对称点坐标

// 求: 点P(x0,y0)关于直线 Ax + By + C = 0 对称的点P'(x,y)

// 计算公式

// x=x0-2Ad, y=y0-2Bd

// d=(Ax0+By0+C)/(A^2+B^2)

function calculateSymmetryPoint(P, A, B, C) {
  let d = (A * P.x + B * P.y + C) / (Math.pow(A, 2) + Math.pow(B, 2));
  let x = P.x - 2 * A * d;
  let y = P.y - 2 * B * d;
  return { x: x, y: y };
}
let P = {
  x: 1,
  y: 3,
};
let A = 2;
let B = 1;
let C = 5;
let r = calculateSymmetryPoint(P, A, B, C);
console.log(r);


已知两点, 求直线点斜式公式

let A = {
  x: 1,
  y: 3,
};
let B = {
  x: 2,
  y: 4,
};
// 点斜式直线
// 斜率
let k = (B.y - A.y) / (B.x - A.x);
// 偏移量
let b = A.y - k * A.x;
console.log("k = " + k + " b = " + b);


两点距离

function getDistance(pointA, pointB) {
  return Math.sqrt(Math.pow(pointA.x - pointB.x, 2) + Math.pow(pointA.y - pointB.y, 2));
}


已知两点, 求直线角度

顺时针,角度为正;

逆时针, 角度为负

function calcAngle(x1, y1, x2, y2) {
  var angle = Math.atan2(y1 - y2, x2 - x1); //弧度
  var theta = angle * (180 / Math.PI); // 角度
  theta < 0 && (theta = 360 + theta);
  return theta;
}
let x1 = 0;
let y1 = 0;
let x2 = 1;
let y2 = -1;
log(calcAngle(x1, y1, x2, y2));


名人名言


思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
--- 牙叔教程


声明


部分内容来自网络
本教程仅用于学习, 禁止用于其他用途


相关文章
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
双 11 电商效率突围:10 款 AI 工具的技术落地与实践指南
2025年双11促销长达38天,电商迎来AI重构关键期。本文剖析10款主流AI工具技术原理,涵盖设计、文案、投放、客服等场景,揭示计算机视觉、自然语言处理等技术如何驱动电商智能化升级,助力企业高效应对大促挑战。
338 1
|
12月前
|
Java 数据库连接 调度
AQS深度解析与技术模拟
【11月更文挑战第26天】AbstractQueuedSynchronizer(AQS)是Java并发包(java.util.concurrent)中的一个核心组件,为构建锁和其他同步器提供了一个强大的基础框架。AQS通过定义一套多线程访问共享资源的同步器框架,极大地简化了同步组件的开发。本文将通过第一原理对AQS进行深入分析,涵盖其相关概念、业务场景、历史背景、功能点、底层原理,并使用Java代码进行模拟,以帮助读者全面理解AQS。
267 1
|
机器学习/深度学习 编解码 算法
超分辨率相关的开源项目
该文档介绍了多种超分辨率模型及其GitHub项目地址,包括Real-ESRGAN(优化真实图片质量)、RCAN(基于残差结构与通道注意力机制)、SwinIR(基于Swin Transformer的图像恢复)、FSRCNN(轻量级快速超分辨率)、EDSR(增强型深度残差网络)、SRGAN(利用GAN的超分辨率模型)及LapSRN(多级Laplacian金字塔超分辨率)。
|
存储 数据挖掘 C语言
Python数组与列表的区别
Python数组与列表的区别
808 0
|
并行计算 Serverless API
函数计算操作报错合集之出现 "AttributeError: 'NoneType' object has no attribute 'pop'" 错误,是什么原因
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
491 1
|
安全 网络安全 数据安全/隐私保护
深入理解HTTP协议:工作原理与安全性
【6月更文挑战第28天】HTTP是互联网基础协议,用于浏览器与服务器通信。基于请求-响应模型,无状态且可扩展。但其明文传输、缺乏身份验证和数据完整性校验导致安全问题。HTTPS 加入SSL/TLS,提供加密、身份验证和完整性校验,保障网络安全。了解HTTP原理和安全至关重要。
|
机器学习/深度学习 传感器 编解码
2023最新 | 单目深度估计网络结构的通用性研究
单目深度估计已经被广泛研究,最近已经报道了许多在性能上显著改进的方法。然而,大多数先前的工作都是在一些基准数据集(如KITTI数据集)上进行评估的,并且没有一项工作对单目深度估计的泛化性能进行深入分析。本文深入研究了各种骨干网络(例如CNN和Transformer模型),以推广单目深度估计。首先,评估了分布内和分布外数据集上的SOTA模型,这在网络训练期间从未见过。然后,使用合成纹理移位数据集研究了基于CNN和Transformer的模型中间层表示的内部属性。通过大量实验,观察到transformer呈现出强烈的形状偏差,而CNN具有强烈纹理偏差。
2023最新 | 单目深度估计网络结构的通用性研究
|
开发框架 自然语言处理 Python
LangChain与智能Agent构建问题之MetaGPT安装如何解决
LangChain与智能Agent构建问题之MetaGPT安装如何解决
266 0
|
前端开发 JavaScript 搜索推荐
深入探讨单页面应用程序(SPA)的优势与实践
深入探讨单页面应用程序(SPA)的优势与实践
|
Java 数据库连接 数据库
深入理解 Java Bean 的生命周期及各个阶段解析
深入理解 Java Bean 的生命周期及各个阶段解析