libc: BGI Фаза 2a — arc/ellipse/drawpoly
Дуги/эллипсы через целочисленную тригонометрию Q7 (_bgi_trig.c, ×128) + общий рисователь полилинией (_bgi_arc_draw.c). arc(x,y,st,end,r), ellipse(x,y,st,end,xr,yr), drawpoly(n,pts). Проверено в MAME (tests/ bgitest): окружность/эллипс/дуга/полигон рисуются корректно. ВАЖНО: тригонометрию считаем в int (Q7), НЕ через (long)…>>8 — первая версия на 32-бит арифметике рисовала эллипс прямоугольником (SDCC/z80 криво собирает 32-бит; см. memory/avoid_32bit_arith_z80). Q7 даёт радиус×значение ≤ 255×128 < 32767 — всё влезает в 16 бит. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -84,6 +84,15 @@ void rectangle(int left, int top, int right, int bottom); /* контур */
|
||||
void bar(int left, int top, int right, int bottom); /* заливка */
|
||||
void circle(int x, int y, int radius); /* окружность */
|
||||
|
||||
/* Дуги/эллипсы: угол в градусах, 0°=восток, против часовой стрелки.
|
||||
* Полный эллипс — ellipse(x,y,0,360,xr,yr). */
|
||||
void arc(int x, int y, int stangle, int endangle, int radius);
|
||||
void ellipse(int x, int y, int stangle, int endangle,
|
||||
int xradius, int yradius);
|
||||
|
||||
/* Ломаная по numpoints точкам {x0,y0,x1,y1,…}; НЕ замыкается сама. */
|
||||
void drawpoly(int numpoints, const int *polypoints);
|
||||
|
||||
/* ---- Текст ------------------------------------------------------- *
|
||||
* Шрифт 8×8 (системный). Рисуется текущим цветом на фоновом. */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user