Skip to content

About

Geometry Extractor

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Geometry Extractor

평면기하 문제를 텍스트로 입력받아 조건을 구조화하고, GeoGebra 작도로 재구성하는 도구.

배경

평면 기하 도형 파싱(이미지 → 구조)은 학계에서도 미해결에 가까운 문제입니다. 이 프로젝트는 그림을 직접 파싱하는 대신, 문제 텍스트를 1차 소스로 삼습니다. 교과서/시험 도형은 "그림은 실제와 다를 수 있음"이 전제라 픽셀 단위로 정밀하지 않고, 필요한 조건 대부분이 텍스트에 이미 서술되어 있기 때문입니다. 자세한 설계 배경은 CLAUDE.md를 참고하세요.

사용 방법

브라우저에서 geometry-extractor.html을 열면 됩니다. 서버가 필요 없는 단일 HTML 파일입니다.

open geometry-extractor.html
  1. console.anthropic.com에서 발급받은 Anthropic API 키를 입력 (브라우저 로컬 저장소에만 저장되고 외부로 전송되지 않습니다.)
  2. 문제 텍스트를 붙여넣고 구조화 추출 클릭 → points/shapes/constraints/underdetermined 스키마의 JSON 생성
  3. GeoGebra로 작도 클릭 → JSON을 규칙 기반으로 GeoGebra 명령으로 변환해 그 자리에서 작도
  4. (선택) 원본 문제 이미지를 업로드하고 비교 실행 → 작도 결과와 원본을 비전 모델로 비교해 수치 차이인지 구조 차이인지 판별

파이프라인

단계 내용 상태
1. 텍스트 → JSON Claude API로 문제 텍스트를 구조화된 조건으로 추출 동작
2. JSON → GeoGebra 작도 규칙 기반 변환(LLM 불필요), GeoGebra 공식 앱(Apps API) 재사용 동작
3. 렌더링 후 비교 작도 결과와 원본 이미지를 비전 모델로 diff 동작
4. 수정 루프 diff 결과로 JSON 재수정 또는 underdetermined 질문 추가 수동 (자동화 전)

2단계 변환기가 처리하는 패턴

점을 하나씩 순서대로 배치하는 규칙(아래)을 먼저 시도하고, 그래도 못 놓는 점이 남으면 3단계 솔버(그 아래)로 넘어갑니다.

순차 배치 규칙:

  • 두 점 사이 길이, 각도(꼭짓점 기준)
  • 중점(midpoint), 선분 위의 점(on_segment, 비율 포함)
  • 두 거리로 원-원 교점 배치
  • 평행사변형 폐합(대각선이 서로 이등분: A+C=B+D)
  • 수선의 발(perpendicular foot): ClosestPoint(Line, Point)
  • 평행사변형에서 한 꼭짓점 각을 중선(변의 중점으로 가는 선분)이 두 부분으로 나눌 때, 인접한 두 변의 길이 비율을 사인법칙으로 역산

연립 솔버(점 여러 개를 동시에 풀어야 하는 경우): 정사각형처럼 강체인 도형의 두 변(예: DE)이 이미 결정 가능하면 나머지 꼭짓점(F, G)은 ±90° 회전으로 자동 유도됩니다. 여기에 "DB의 길이를 x라 함" 같은 이름 붙은 변수와 "x+y=15" 같은 일차식 관계, 그리고 파생된 꼭짓점이 특정 직선 위에 있어야 한다는 조건(F가 AC 위)을 모아 작은 최소제곱 솔버(Levenberg-Marquardt, 수치 야코비안)로 동시에 풉니다. 회전 방향이 두 가지(±90°)로 갈리는 경우 둘 다 풀어보고, 변수 값이 실제 변의 범위 안에 있는지·"내부의 점"으로 서술된 점이 실제로 해당 다각형 안에 들어오는지로 올바른 쪽을 고릅니다. 성공하면 결과 좌표를 하드코딩하지 않고 D=B+(6/Distance(B,A))*(A-B)처럼 이미 배치된 점을 참조하는 동적 수식으로 내보내, GeoGebra에서 기준점을 움직여도 따라가도록 합니다.

길이 조건이 아예 없는 문제(각도만 묻는 문제 등)는 임의의 기준 길이(5)로 배치하고, 이 변환기가 처리하지 못하는 제약은 "수동 확인 필요" 목록에 표시됩니다 — 조용히 무시하지 않습니다.

알려진 한계

  • 각도 constraint의 targets 순서(꼭짓점 위치)는 LLM 추출마다 일관되지 않을 수 있어, description 텍스트로 교차 검증합니다.
  • 평행사변형 외의 도형(원, 임의 다각형)에서 변 길이가 여러 개 동시에 미지수인 복잡한 케이스는 아직 일반화된 해법이 없습니다.
  • 연립 솔버는 square 도형 타입만 강체로 취급합니다 — 직사각형/마름모 등 다른 강체 도형은 아직 지원하지 않습니다.
  • 이름 붙은 변수 사이의 관계는 일차식(예: x+y=15, 2x-y=3)만 파싱합니다. 이차식 이상의 관계는 지원하지 않습니다.
  • 원-원 교점이 필요한 점이 연립 솔버가 다루는 하위 시스템의 기준점 역할을 겸하는 경우, 내부적으로 고른 교점이 GeoGebra의 Intersect(...,1)이 실제로 고르는 교점과 다를 수 있어 회전 방향이 거울상으로 잘못 나올 가능성이 있습니다 — 3단계(원본과 비교)로 반드시 확인하세요.
  • 4단계(자동 수정 루프)는 아직 사람이 수동으로 반복합니다.
  • Haiku로 여러번 실험한 결과, Sonnet과 JSON추출 품질이 확연히 다르며 문제 이해도가 꽤나 떨어지는것을 확인했습니다.

하지 않는 것

범용 기하 도형 이미지 파싱(임의의 도형 사진 → 완전한 구조 추출)은 시도하지 않습니다. 텍스트가 조건 대부분을 결정한다는 전제가 깨지는 문제는 이 프로젝트 스코프 밖입니다.

About

Geometry Extractor

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages