向量
交互式向量允许用户通过拖动尾部和尖端点来操作数学向量。这对于演示向量概念(如大小、方向和向量运算)很有用。
交互式向量
具有可拖动尾部(原点)和尖端(箭头)点的向量。拖动任一端点以查看向量属性实时更新。
import { InteractiveVector } from '@wangyaoshen/locus-interaction';
const vector = new InteractiveVector({
tail: [150, 200],
tip: [350, 100],
color: '#FF5722',
lineWidth: 4,
arrowSize: 18,
pointRadius: 10,
onChange: (tail, tip) => {
console.log('向量已更改:', tail, tip);
},
});
向量属性
向量组件提供了几个计算属性:
const vector = new InteractiveVector({
tail: [0, 0],
tip: [100, 100],
});
// 获取大小(长度)
const magnitude = vector.getMagnitude(); // 141.42...
// 获取以弧度为单位的角度
const angle = vector.getAngle(); // 0.785... (45 度)
// 获取方向(单位向量)
const direction = vector.getDirection(); // [0.707..., 0.707...]
// 获取向量分量
const vec = vector.getVector(); // [100, 100]
约束端点
对尾部或尖端点独立应用约束:
import { InteractiveVector, horizontal, circle } from '@wangyaoshen/locus-interaction';
// 尾部水平移动,尖端自由移动
const vector = new InteractiveVector({
tail: [100, 200],
tip: [300, 100],
constrainTail: horizontal(200),
onChange: (tail, tip) => {
console.log('向量:', tail, tip);
},
});
向量运算
// 向量加法
const v1 = new InteractiveVector({ tail: [0, 0], tip: [100, 0] });
const v2 = new InteractiveVector({ tail: [0, 0], tip: [0, 100] });
const sum = addVectors(v1.getVector(), v2.getVector()); // [100, 100]
// 向量点积
const dotProduct = dotProduct(v1.getVector(), v2.getVector()); // 0
// 向量叉积(2D)
const crossProduct = crossProduct2D(v1.getVector(), v2.getVector()); // 10000
属性
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
tail | Vector2 | [0, 0] | 尾部位置 |
tip | Vector2 | [100, 100] | 尖端位置 |
color | string | '#FF5722' | 向量颜色 |
lineWidth | number | 4 | 线条宽度 |
arrowSize | number | 18 | 箭头大小 |
pointRadius | number | 10 | 端点半径 |
onChange | (tail, tip) => void | - | 更改回调 |