Нарисовать равнобедренный треугольник - C#
Формулировка задачи:
Нарисовать 1 закрашенный равнобедренный треугольник, зная координаты только одной точки треугольника, а также длины сторон описанного прямоугольника (см. рисунок 2). Координаты x, y вводятся пользователем. высота 18, длина 74
Решение задачи: «Нарисовать равнобедренный треугольник»
textual
Листинг программы
void Field::draw_triangle(double height, double width, int x, int y) { //метод отрисовки треугольника
//y = kx + b
//k = height / width / 2;
//b = y - kx
//x = (y - b) / k
double k = height / width * 2; //коэффициент наклона прямой (тангенс угла)
double b = y - k * x; // это следует из общего линейного уравнения
int i, j; //инкременты циклов, а также i - псевдо-x, а j - псевдо-y
for (j = y; j < y + height; j++) { //по всей высоте
i = (int) ((j - b) / k); //x = (y - b) / k
//cout << "i = " << i << " j = " << j << endl;
if(is_in_field(i, j)) //пока находимся в поле - отрисовываем
field[i][j] = marker;
}
int right_corner_x = i;
k = -k; //то же самое что и выше, просто знак коэффициента наклона меняется на обратный.
b = y - k * x;
for (j = y; j < y + height; j++) {
i = (int) ((j - b) / k);
if(is_in_field(i, j))
field[i][j] = marker;
}
int left_corner_x = i; //основание треугольника
for (int i = left_corner_x, j = (int) (y + height - 1); i <= right_corner_x; ++i) {
if(is_in_field(i, j))
field[i][j] = marker;
}
marker_increment();
}