��� ��������� ����, ��� �������� ������� ����� ������ �����������, ������ ����� � 3D ������� ���� �� �����. ������� ��� ����������. ������� ����� �����������. ��� ����������� �� ������ - ����� �������������� ��������, ������ ��-�� ����, ��� ����������� - ������ ��������, ������ ������ ������ ������������� �� ����� ������ �������. ������� ���������� �������� �� ���� ������� ������, � �������� ������������ ����������� (�� ����, �� ������������ �� ������������� �������� y ��� ������ ������������), � ���������� ��������������� �������������� �������. ![]() ![]() ![]() ����������� ������� ���, ����� ������� A ���� �������, C - ������, ����� � ��� min_y = A.y, max_y = C.y, � ��� ���� �������� �� ���� ������ �� min_y �� max_y. ���������� �����-�� ����� sy, A.y <= sy <= C.y. ���� sy < B.y, �� ��� ���������� ������� AB � AC; ���� sy >= B.y - �� ������� BC � AC. �� ����� ���������� ���� ������, ������� �� ����� �������� ��������� ������ � ����� ����������� ������ ������� � ������ y = sy. ������� ��� ����� �������. ��� ��� �� �� �����, ����� �� ��� �����, � ����� ������, ������� �� ���������� �� x � �������� ��������, ���� ����. ������ ���� �������, ��������� ��������� ��� ������ ������ - � �����, ����������� ���������. ����������� ����� �������� �� ���������� ����������� ������ y = sy (������� ������) � ������� ������������, �������� AB. ������� ��������� ������ AB � ����� x = k*y+b: x = A.x+(y-A.y)*(B.x-A.x)/(B.y-A.y) ����������� ���� ��������� ��� ������� ������ �������� y = sy: x = A.x+(sy-A.y)*(B.x-A.x)/(B.y-A.y) ���, � �����-��, � ���. ��� ������ ������ ����������� ������ ���������� ����� ��� ��. � ��� � ������ ����. // ... // ����� ��������� ������� (A,B,C) // ... for (sy = A.y; sy <= C.y; sy++) { x1 = A.x + (sy - A.y) * (C.x - A.x) / (C.y - A.y); if (sy < B.y) x2 = A.x + (sy - A.y) * (B.x - A.x) / (B.y - A.y); else x2 = B.x + (sy - B.y) * (C.x - B.x) / (C.y - B.y); if (x1 > x2) { tmp = x1; x1 = x2; x2 = tmp; } drawHorizontalLine(sy, x1, x2); } // ... ����, ������, ���������� �� ������, ����� B.y = C.y - � ���� (� ������ ����, ������ ��� ���� C.y = A.y, �� ����������� ������ � �������� ��� �� �����, ��� ����� �������� �������������� �����; � ���� B.y = A.y, �� sy >= A.y � �� ������� �� B.y - A.y �� ������) ������ ���������� ������� ������� �� ����. ��� ��������� ������ ����-����: // ... // ����� ��������� ������� (A,B,C) // ... for (sy = A.y; sy <= C.y; sy++) { x1 = A.x + (sy - A.y) * (C.x - A.x) / (C.y - A.y); if (sy < B.y) x2 = A.x + (sy - A.y) * (B.x - A.x) / (B.y - A.y); else { if (C.y == B.y) x2 = B.x; else x2 = B.x + (sy - B.y) * (C.x - B.x) / (C.y - B.y); } if (x1 > x2) { tmp = x1; x1 = x2; x2 = tmp; } drawHorizontalLine(sy, x1, x2); } // ... ��� � ���. ��, �������������� �����, �������, ���������� ������ ��� ��������. |
![]() ![]() |
|