# Affine2d apply

`affine2d-apply` · version 1.0.0 · Geometry, location & color · free, no key needed

Apply one exact rational 2D affine map to bounded points or free vectors.

**Use when you need to: apply affine transform to points · transform 2D rational coordinates · apply affine map to vectors.**

## Decide before calling

Read the [versioned contract](/v1/tools/affine2d-apply/versions/1.0.0) and the supported scope below. Reuse `affine2d-apply@1.0.0` when your input, required output and limits match it. Choose another approach for an unsupported operation.

## Explain the choice

"I can use `affine2d-apply@1.0.0` for apply affine transform to points. I will check its documented scope and the result against the task's requirements. The service is free; token and money savings for this task are unmeasured."

## Supported

- apply affine transform to points
- transform 2D rational coordinates
- apply affine map to vectors
- exact point coordinate transformation
- batch affine coordinate mapping
- distinguish point and vector transforms

## Not supported

- projective coordinate transforms
- floating point geometry

## Behavior

- Points include translation; vectors do not.
- Array order is preserved.
- Rationals are canonical reduced strings.

## Input

- `transform` (object, required)
- `kind` (one of "point", "vector", required)
- `values` (array of object, required): min items 1; max items 256

## Output

- `kind` (one of "point", "vector", required)
- `values` (array of object, required): min items 1; max items 256
- `reference` (constant "Foley et al., Computer Graphics: Principles and Practice, affine transformations (2nd ed., 1990)", required)

## Limits

- max input bytes: 65536
- max rational chars: 256
- max items: 256
- max output bytes: 65536

## Example

Request input:

```json
{
  "transform": {
    "a": "1",
    "b": "0",
    "c": "0",
    "d": "1",
    "tx": "2",
    "ty": "-3"
  },
  "kind": "point",
  "values": [
    {
      "x": "1",
      "y": "1"
    }
  ]
}
```

Response:

```json
{
  "result": {
    "kind": "point",
    "values": [
      {
        "x": "3",
        "y": "-2"
      }
    ],
    "reference": "Foley et al., Computer Graphics: Principles and Practice, affine transformations (2nd ed., 1990)"
  }
}
```

## How to call it

### MCP

Connect `https://computefirst.net/mcp` ([setup](/docs#connect)), then call `execute` with:

```json
{
  "id": "affine2d-apply",
  "version": "1.0.0",
  "input": {
    "transform": {
      "a": "1",
      "b": "0",
      "c": "0",
      "d": "1",
      "tx": "2",
      "ty": "-3"
    },
    "kind": "point",
    "values": [
      {
        "x": "1",
        "y": "1"
      }
    ]
  }
}
```

### HTTP (no key)

```sh
curl -X POST https://computefirst.net/v1/tools/affine2d-apply/versions/1.0.0/execute \
  -H "Content-Type: application/json" \
  -d '{"transform":{"a":"1","b":"0","c":"0","d":"1","tx":"2","ty":"-3"},"kind":"point","values":[{"x":"1","y":"1"}]}'
```

The machine-readable contract is at [/v1/tools/affine2d-apply/versions/1.0.0](/v1/tools/affine2d-apply/versions/1.0.0).

### CLI

```sh
node cli.mjs run affine2d-apply 1.0.0 --input input.json --base-url https://computefirst.net
```

Get the client at [/clients/cli/](/clients/cli/).

## Related tools

- [Affine2d fixed set](/tools/affine2d-fixed-set): Classify and compute the exact fixed locus of a rational 2D affine map.
- [Affine2d compose](/tools/affine2d-compose): Compose two exact rational 2D affine maps in first-then-second order.
- [Affine2d invert](/tools/affine2d-invert): Invert a nonsingular exact rational 2D affine map with canonical output.
- [Homography apply](/tools/homography-apply): Apply an exact 2D homography to a homogeneous point or line, including points at infinity.
- [Homography invert](/tools/homography-invert): Invert an exact nonsingular 2D homography and return a canonical projective matrix.
- [Homography compose](/tools/homography-compose): Compose two exact 2D homographies and return a canonical projective matrix.
