# Homography incidence verify

`homography-incidence-verify` · version 1.0.0 · Geometry, location & color · free, no key needed

Verify exact point-line incidence before and after a 2D homography with certificates.

**Use when you need to: verify projective incidence · check point lies on line after homography · certify homogeneous point line incidence.**

## Decide before calling

Read the [versioned contract](/v1/tools/homography-incidence-verify/versions/1.0.0) and the supported scope below. Reuse `homography-incidence-verify@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 `homography-incidence-verify@1.0.0` for verify projective incidence. 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

- verify projective incidence
- check point lies on line after homography
- certify homogeneous point line incidence
- exact incidence preservation test
- validate transformed point and line
- produce projective incidence certificate

## Not supported

- approximate distance to a line
- polygon topology validation

## Behavior

- Canonical rationals are integers or reduced p/q strings with a positive denominator.
- Homogeneous outputs are primitive integer tuples with first nonzero coordinate positive.
- All arithmetic and predicates use exact BigInt cross-products; binary floating point and epsilon comparisons are never used.
- Reference: Hartley & Zisserman, Multiple View Geometry, 2nd ed., Chapter 2.

## Input

- `matrix` (array of array of string, required): min items 3; max items 3; each min items 3; each max items 3; each each min length 1; each each max length 256; each each pattern `^(?:0|-?[1-9][0-9]*)(?:/[1-9][0-9]*)?$`
- `point` (array of string, required): min items 3; max items 3; each min length 1; each max length 256; each pattern `^(?:0|-?[1-9][0-9]*)(?:/[1-9][0-9]*)?$`
- `line` (array of string, required): min items 3; max items 3; each min length 1; each max length 256; each pattern `^(?:0|-?[1-9][0-9]*)(?:/[1-9][0-9]*)?$`

## Output

- `source_incident` (boolean, required)
- `transformed_incident` (boolean, required)
- `source_certificate` (string, required): min length 1; max length 256; pattern `^(?:0|-?[1-9][0-9]*)(?:/[1-9][0-9]*)?$`
- `transformed_certificate` (string, required): min length 1; max length 256; pattern `^(?:0|-?[1-9][0-9]*)(?:/[1-9][0-9]*)?$`
- `point` (array of string, required): min items 3; max items 3; each min length 1; each max length 256; each pattern `^(?:0|-?[1-9][0-9]*)(?:/[1-9][0-9]*)?$`
- `line` (array of string, required): min items 3; max items 3; each min length 1; each max length 256; each pattern `^(?:0|-?[1-9][0-9]*)(?:/[1-9][0-9]*)?$`
- `reference` (constant "Hartley & Zisserman, Multiple View Geometry, 2nd ed., Chapter 2", required)

## Limits

- max input bytes: 8192
- max rational bytes: 256
- max output bytes: 8192
- max tree nodes: 128

## Example

Request input:

```json
{
  "matrix": [
    [
      "1",
      "0",
      "0"
    ],
    [
      "0",
      "1",
      "0"
    ],
    [
      "0",
      "0",
      "1"
    ]
  ],
  "point": [
    "1",
    "2",
    "1"
  ],
  "line": [
    "1",
    "0",
    "-1"
  ]
}
```

Response:

```json
{
  "result": {
    "source_incident": true,
    "transformed_incident": true,
    "source_certificate": "0",
    "transformed_certificate": "0",
    "point": [
      "1",
      "2",
      "1"
    ],
    "line": [
      "1",
      "0",
      "-1"
    ],
    "reference": "Hartley & Zisserman, Multiple View Geometry, 2nd ed., Chapter 2"
  }
}
```

## How to call it

### MCP

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

```json
{
  "id": "homography-incidence-verify",
  "version": "1.0.0",
  "input": {
    "matrix": [
      [
        "1",
        "0",
        "0"
      ],
      [
        "0",
        "1",
        "0"
      ],
      [
        "0",
        "0",
        "1"
      ]
    ],
    "point": [
      "1",
      "2",
      "1"
    ],
    "line": [
      "1",
      "0",
      "-1"
    ]
  }
}
```

### HTTP (no key)

```sh
curl -X POST https://computefirst.net/v1/tools/homography-incidence-verify/versions/1.0.0/execute \
  -H "Content-Type: application/json" \
  -d '{"matrix":[["1","0","0"],["0","1","0"],["0","0","1"]],"point":["1","2","1"],"line":["1","0","-1"]}'
```

The machine-readable contract is at [/v1/tools/homography-incidence-verify/versions/1.0.0](/v1/tools/homography-incidence-verify/versions/1.0.0).

### CLI

```sh
node cli.mjs run homography-incidence-verify 1.0.0 --input input.json --base-url https://computefirst.net
```

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

## Related tools

- [Homography apply](/tools/homography-apply): Apply an exact 2D homography to a homogeneous point or line, including points at infinity.
- [Point in polygon classify](/tools/point-in-polygon-classify): Classifies a rational-coordinate point as inside, outside, or boundary using an exact half-open ray rule.
- [Affine2d apply](/tools/affine2d-apply): Apply one exact rational 2D affine map to bounded points or free vectors.
- [Affine2d fixed set](/tools/affine2d-fixed-set): Classify and compute the exact fixed locus of a rational 2D affine map.
- [Color contrast wcag](/tools/color-contrast-wcag): Compute WCAG 2.x relative luminance, contrast ratio, and AA/AAA pass flags for two opaque sRGB colors.
- [Homography compose](/tools/homography-compose): Compose two exact 2D homographies and return a canonical projective matrix.
