Skip to content

Commit

Permalink
[lib-vec2] 0.3.0 Release
Browse files Browse the repository at this point in the history
  • Loading branch information
vicimpa committed Dec 30, 2024
1 parent dd3bc69 commit ce88c66
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 39 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ npm. Теперь все библиотеки можно и нужно буде
- A simple project demonstrating drag-and-drop functionality using @vicimpa/easy-drag.
- [@vicimpa/events (0.0.11)](packages/events) - [открыть на npm](https://www.npmjs.com/package/@vicimpa/events)
- A lightweight TypeScript library for managing event listeners on HTML elements, document, and window.
- [@vicimpa/lib-vec2 (0.2.18)](packages/lib-vec2) - [открыть на npm](https://www.npmjs.com/package/@vicimpa/lib-vec2)
- [@vicimpa/lib-vec2 (0.3.0)](packages/lib-vec2) - [открыть на npm](https://www.npmjs.com/package/@vicimpa/lib-vec2)
- Библиотека предоставляет обширный набор утилит для работы с2D-векторами
- [@vicimpa/math (0.0.9)](packages/math) - [открыть на npm](https://www.npmjs.com/package/@vicimpa/math)
- A collection of mathematical utility functions including operations like clamp, lerp, normalize, and more.
Expand Down
34 changes: 16 additions & 18 deletions packages/lib-vec2/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
Обновим описание библиотеки @vicimpa/lib-vec2 с учетом нового файла `index.d.ts`.

# @vicimpa/lib-vec2

Библиотека @vicimpa/lib-vec2 предоставляет обширный набор утилит для работы с 2D-векторами. Эта библиотека особенно полезна для графических приложений, симуляций физики и любых других областей, где требуется математика 2D-векторов.
Expand All @@ -23,18 +25,16 @@ const v1 = new Vec2(); // По умолчанию (0, 0)
const v2 = new Vec2(1, 2); // Из координат
const v3 = new Vec2({ x: 3, y: 4 }); // Из объекта
const v4 = new Vec2(v2); // Из другого Vec2
const v5 = new Vec2("1:2"); // Из строки Vec2Hash
```

Создать новый вектор можно и при помощи функции: `vec2`
Создать новый вектор можно и при помощи функции: vec2

```ts
import { vec2 } from "@vicimpa/lib-vec2";
const v1 = vec2(); // По умолчанию (0, 0)
const v2 = vec2(1, 2); // Из координат
const v3 = vec2({ x: 3, y: 4 }); // Из объекта
const v4 = vec2(v2); // Из другого Vec2
const v5 = vec2("1:2"); // Из строки Vec2Hash
```

### Свойства
Expand All @@ -44,7 +44,6 @@ const v5 = vec2("1:2"); // Из строки Vec2Hash
- **tuple**: [number, number] - Возвращает вектор в виде кортежа.
- **size**: { width: number, height: number } - Возвращает вектор в виде объекта размера.
- **point**: { x: number, y: number } - Возвращает вектор в виде объекта точки.
- **hash**: string - Возвращает хэш вектора в формате `${x}:${y}`.

### Методы

Expand All @@ -65,7 +64,7 @@ const v5 = vec2("1:2"); // Из строки Vec2Hash
- **round**(): this - Округляет координаты вектора.
- **ceil**(): this - Приводит координаты вектора к ближайшему большему целому.
- **floor**(): this - Приводит координаты вектора к ближайшему меньшему целому.
- **inverse**(): this - Меняет местами координаты x и y.
- **inverse**(): this - Инвертирует координаты вектора.
- **lerp**(to: Vec2, i: number): this - Линейно интерполирует между этим вектором и другим.
- **sign**(): this - Устанавливает координаты вектора в их знаковое значение.
- **abs**(): this - Устанавливает координаты вектора в их абсолютные значения.
Expand Down Expand Up @@ -107,7 +106,6 @@ const v5 = vec2("1:2"); // Из строки Vec2Hash

- **fromRandom**(vec?: Vec2): Vec2
- **fromSrandom**(vec?: Vec2): Vec2
- **fromHash**(hash: Vec2Hash, vec?: Vec2): Vec2
- **fromAngle**(d: number, vec?: Vec2): Vec2
- **fromPoint**(point: Vec2Point, vec?: Vec2): Vec2
- **fromSize**(size: Vec2Size, vec?: Vec2): Vec2
Expand Down Expand Up @@ -171,33 +169,33 @@ console.log(v4.toString()); // Выводит "0.707 0.707"

## Vec2Map

Класс `Vec2Map` предоставляет структуру данных, аналогичную стандартной карте (Map), но с использованием объектов `Vec2` в качестве ключей. Это полезно, когда вам нужно сопоставить значения с 2D-векторами.
Класс Vec2Map предоставляет структуру данных, аналогичную стандартной карте (Map), но с использованием объектов Vec2 в качестве ключей. Это полезно, когда вам нужно сопоставить значения с 2D-векторами.

### Свойства
- **size**: number - Возвращает размер коллекции.

### Методы

- **has(...args: Vec2Args): boolean** - Проверяет, существует ли элемент с заданным ключом `Vec2`.
- **get(...args: Vec2Args): T** - Возвращает значение, связанное с заданным ключом `Vec2`.
- **set(value: T, ...args: Vec2Args): this** - Устанавливает значение для заданного ключа `Vec2`.
- **delete(...args: Vec2Args): boolean** - Удаляет элемент с заданным ключом `Vec2`.
- **has(...args: Vec2Args): boolean** - Проверяет, существует ли элемент с заданным ключом Vec2.
- **get(...args: Vec2Args): T** - Возвращает значение, связанное с заданным ключом Vec2.
- **set(vec: Vec2Args[0], value: T): this** - Устанавливает значение для заданного ключа Vec2.
- **delete(...args: Vec2Args): boolean** - Удаляет элемент с заданным ключом Vec2.
- **clear(): void** - Очищает все элементы в карте.
- **forEach(callback: (key: Vec2, value: T, self: this) => any): void** - Выполняет указанную функцию один раз для каждого элемента в карте.
- **[Symbol.iterator](): Generator<[key: Vec2, value: T], void, unknown>** - Возвращает итератор для перебора элементов карты.

## Vec2Set

Класс `Vec2Set` предоставляет структуру данных, аналогичную стандартному множеству (Set), но с использованием объектов `Vec2` в качестве элементов. Это полезно для хранения уникальных 2D-векторов.
Класс Vec2Set предоставляет структуру данных, аналогичную стандартному множеству (Set), но с использованием объектов Vec2 в качестве элементов. Это полезно для хранения уникальных 2D-векторов.

### Свойства
- **size**: number - Возвращает размер коллекции.

### Методы

- **has(...args: Vec2Args): boolean** - Проверяет, существует ли элемент `Vec2` в множестве.
- **add(...args: Vec2Args): this** - Добавляет элемент `Vec2` в множество.
- **delete(...args: Vec2Args): boolean** - Удаляет элемент с заданным ключом `Vec2`.
- **has(...args: Vec2Args): boolean** - Проверяет, существует ли элемент Vec2 в множестве.
- **add(...args: Vec2Args): this** - Добавляет элемент Vec2 в множество.
- **delete(...args: Vec2Args): boolean** - Удаляет элемент с заданным ключом Vec2.
- **clear(): void** - Очищает все элементы в множестве.
- **forEach(callback: (key: Vec2, self: this) => any): void** - Выполняет указанную функцию один раз для каждого элемента в множестве.
- **[Symbol.iterator](): Generator<Vec2, void, unknown>** - Возвращает итератор для перебора элементов множества.
Expand All @@ -217,8 +215,8 @@ const v1 = new Vec2(1, 2);
const v2 = new Vec2(3, 4);

// Устанавливаем значения для векторов
map.set(10, v1);
map.set(20, v2);
map.set(v1, 10);
map.set(v2, 20);

// Получаем значения по ключу
console.log(map.get(v1)); // Выводит 10
Expand Down Expand Up @@ -266,4 +264,4 @@ set.clear();
console.log(set.has(v1)); // Выводит false
```

Эти примеры демонстрируют, как использовать `Vec2Map` и `Vec2Set` для работы с коллекциями 2D-векторов, обеспечивая уникальность и быстрый доступ к элементам.
Эти примеры демонстрируют, как использовать Vec2Map и Vec2Set для работы с коллекциями 2D-векторов, обеспечивая уникальность и быстрый доступ к элементам.
2 changes: 1 addition & 1 deletion packages/lib-vec2/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@vicimpa/lib-vec2",
"version": "0.2.18",
"version": "0.3.0",
"description": "Библиотека предоставляет обширный набор утилит для работы с2D-векторами",
"repository": "github:vicimpa/vicimpa-library",
"funding": "https://boosty.to/vic_dev",
Expand Down
40 changes: 21 additions & 19 deletions packages/lib-vec2/src/vec2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ export type Vec2Size = { width: number, height: number; };
export type TPageXY = { pageX: number, pageY: number; };
export type TOffsetXY = { offsetX: number, offsetY: number; };
export type TDeltaXY = { deltaX: number, deltaY: number; };
export type Vec2Hash = `${number}:${number}`;
export type TRect2 = [
...([x: number, y: number] | [xy: Vec2]),
...([w: number, h: number] | [wh: Vec2])
Expand All @@ -15,8 +14,7 @@ export type Vec2Args = (
never
| []
| [vec: Vec2]
| [xy: Vec2Point | number]
| [hash: Vec2Hash]
| [xy: Vec2Point | Vec2Tuple | number]
| Vec2Tuple
);

Expand All @@ -33,17 +31,16 @@ export function vec2(...args: Vec2Args) {
export function vec2run<F extends Vec2Runner>(args: Vec2Args, mutation: F): ReturnType<F> {
var first = args[0] ?? 0;

if (typeof first === 'string') {
const [x = 0, y = 0] = first.split(':').map(Number);
return mutation.call(x, y);
}

if (typeof first === 'number') {
if (typeof args[1] === 'number')
return mutation.call(null, first, args[1]);
return mutation.call(null, first, first);
}

if (Array.isArray(first)) {
return mutation.call(null, first[0], first[1]);
}

if (first && ('x' in first) && ('y' in first))
return mutation.call(null, first.x, first.y);

Expand Down Expand Up @@ -86,10 +83,6 @@ export class Vec2 {
};
}

get hash(): Vec2Hash {
return `${this.x}:${this.y}`;
}

constructor(...args: Vec2Args) {
this.set(...args);
}
Expand Down Expand Up @@ -380,10 +373,6 @@ export class Vec2 {
});
}

static fromHash(hash: Vec2Hash, vec = new this()) {
return vec.set(hash);
}

static fromAngle(d: number, vec = new this()) {
return vec.set(Math.sin(d), Math.cos(d));
}
Expand Down Expand Up @@ -428,6 +417,12 @@ export class Vec2 {
export class Vec2Map<T> {
private __data = new Map<number, Map<number, T>>();

constructor(points?: Iterable<[Vec2 | Vec2Point | number, T]>) {
for (const [key, value] of points) {
this.set(key, value);
}
}

get size() {
var count = 0;
this.__data.forEach(row => count += row.size);
Expand All @@ -452,8 +447,8 @@ export class Vec2Map<T> {
});
}

set(value: T, ...args: Vec2Args) {
return vec2run(args, (x, y) => {
set(vec: Vec2Args[0], value: T) {
return vec2run([vec], (x, y) => {
(this.__data.get(y) ?? (
this.__data.set(y, new Map()),
this.__data.get(y)!
Expand Down Expand Up @@ -485,6 +480,12 @@ export class Vec2Map<T> {
export class Vec2Set {
private __data = new Map<number, Set<number>>();

constructor(points?: Iterable<Vec2 | Vec2Point | number>) {
for (const point of points) {
this.add(point);
}
}

get size() {
var count = 0;
this.__data.forEach(row => count += row.size);
Expand Down Expand Up @@ -531,4 +532,5 @@ export class Vec2Set {
}
}
}
}
}
new Vec2Set([1]);

0 comments on commit ce88c66

Please sign in to comment.