JavaScirpt 已知某一点坐标、线段长度和旋转角度,求另一点坐标

这篇博客介绍了如何使用JavaScript计算一个点在给定角度和长度下的旋转后坐标。通过`calculateCoordinatePoint`函数,结合`calculateRotate`和`calculateCoordinateRelativePoint`两个辅助函数,实现了从原始坐标到旋转坐标再到相对于原点坐标的转换过程。适用于图形处理和二维坐标变换场景。
摘要由CSDN通过智能技术生成
/**
 已知某一点坐标,旋转角度,长度,求另一点坐标
 */
export const calculateCoordinatePoint = (originPoint, degree, len) => {
    let rotate = (degree - 90 + 360) % 360; //这里是因为一开始以y轴下方为0度的
    let point = {
        x: len,
        y: 0
    };
 //计算某一点旋转后的坐标点,这里假设传入的点为原点
    let relativeOriginPoint = calculateRotate(point, rotate);
//计算相对坐标系的坐标
    let points = calculateCoordinateRelativePoint(originPoint, relativeOriginPoint);
    return points;
};


/**
 * 计算某一点旋转后的坐标点
 * @param point
 * @param degree
 */
export const calculateRotate = (point, degree) => {
    let x = point.x * Math.cos(degree * Math.PI / 180) + point.y * Math.sin(degree * Math.PI / 180);
    let y = -point.x * Math.sin(degree * Math.PI / 180) + point.y * Math.cos(degree * Math.PI / 180);
    let relativeOriginPoint = {
        x: Math.round(x * 100) / 100,
        y: Math.round(y * 100) / 100
    };
    return relativeOriginPoint;
};


/**
 * 计算相对坐标系的坐标
 */
export const calculateCoordinateRelativePoint = (origin, relativeOriginPoint) => {
    let x = relativeOriginPoint.x + origin.x;
    let y = relativeOriginPoint.y + origin.y;
    let points = {
        x: Math.round(x * 100) / 100,
        y: Math.round(y * 100) / 100
    };
    return points;
};

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript中的原型链(prototype chain)和继承是面向对象编程的重要概念,它们是JavaScript特有的实现继承的方式,与传统的类-实例模型不同。 1. 原型链:每个JavaScript对象都有一个内置的[[Prototype]]属性,指向另一个对象。当你试图访问一个对象的属性或方法时,如果该对象自身没有这个属性,JavaScript会沿着原型链向上查找,直到找到或者到达原型链的顶端(`Object.prototype`)。这就是原型链的工作原理,它使得子类可以访问父类的方法和属性。 2. 继承:在JavaScript中,继承是通过原型链实现的。通常,我们会创建一个构造函数(也称为原型的构造函数),然后用它来创建一个新的对象,这个新对象会自动获得原型(构造函数的实例)的所有属性和方法。子类(构造函数的新实例)就通过这种方式“继承”了父类的特性。 举个例子: ```javascript function Animal(name) { this.name = name; } Animal.prototype.speak = function() { console.log(this.name + ' makes a sound.'); } function Dog(name, breed) { Animal.call(this, name); // 使用构造函数的call方法来设置原型链 this.breed = breed; } Dog.prototype = Object.create(Animal.prototype); // 创建子类的原型并指向父类 Dog.prototype.constructor = Dog; // 修正构造函数指针 // 创建子类实例 let myDog = new Dog('Rex', 'Labrador'); myDog.speak(); // 输出 "Rex makes a sound." ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值