функция, которая в качестве входного параметра задает точку и значение площади квадрата, возвращает четыре квадрата - PullRequest
0 голосов
/ 26 апреля 2010

в этом коде я не понимаю, почему учитель иногда использовал + значение, - значение;

/******************************************/
// function void returnSquares(POINT point, int value)
void returnSquares(POINT point, int value) {
    SQUARE tabSquares[4];       // table of squares that we are creating
    int i;

    // getting points of 4 squares
    // for first square input point is point C
    tabSquares[0].pointA.dimX = point.dimX - value;
    tabSquares[0].pointA.dimY = point.dimY + value;
    tabSquares[0].pointB.dimX = point.dimX;
    tabSquares[0].pointB.dimY = point.dimY + value;
    tabSquares[0].pointC.dimX = point.dimX;
    tabSquares[0].pointC.dimY = point.dimY;
    tabSquares[0].pointD.dimX = point.dimX - value;
    tabSquares[0].pointD.dimY = point.dimY; 

    // for 2nd square input point is point D
    tabSquares[1].pointA.dimX = point.dimX;
    tabSquares[1].pointA.dimY = point.dimY + value;
    tabSquares[1].pointB.dimX = point.dimX + value;
    tabSquares[1].pointB.dimY = point.dimY + value;
    tabSquares[1].pointC.dimX = point.dimX + value;
    tabSquares[1].pointC.dimY = point.dimY;
    tabSquares[1].pointD.dimX = point.dimX;
    tabSquares[1].pointD.dimY = point.dimY; 

    // for 3rd square input point is point A
    tabSquares[2].pointA.dimX = point.dimX;
    tabSquares[2].pointA.dimY = point.dimY;
    tabSquares[2].pointB.dimX = point.dimX + value;
    tabSquares[2].pointB.dimY = point.dimY;
    tabSquares[2].pointC.dimX = point.dimX + value;
    tabSquares[2].pointC.dimY = point.dimY - value;
    tabSquares[2].pointD.dimX = point.dimX;
    tabSquares[2].pointD.dimY = point.dimY - value;

    // for 4th square input point is point B
    tabSquares[3].pointA.dimX = point.dimX - value;
    tabSquares[3].pointA.dimY = point.dimY;
    tabSquares[3].pointB.dimX = point.dimX;
    tabSquares[3].pointB.dimY = point.dimY;
    tabSquares[3].pointC.dimX = point.dimX;
    tabSquares[3].pointC.dimY = point.dimY - value;
    tabSquares[3].pointD.dimX = point.dimX - value;
    tabSquares[3].pointD.dimY = point.dimY - value;


    for (i=0; i<4; i++) {
        printf("Square number %d\n",i); // now we print parameters of each point in current Square
        printf("point A x= %0.2f y= %0.2f\n",tabSquares[i].pointA.dimX,tabSquares[i].pointA.dimY); 
        printf("point B x= %0.2f y= %0.2f\n",tabSquares[i].pointB.dimX,tabSquares[i].pointB.dimY);
        printf("point C x= %0.2f y= %0.2f\n",tabSquares[i].pointC.dimX,tabSquares[i].pointC.dimY);
        printf("point D x= %0.2f y= %0.2f\n",tabSquares[i].pointD.dimX,tabSquares[i].pointD.dimY);
    }
}

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

Рассмотрим изображение:

          C
D *-------*
  |       |
  |Square |
  |       |
  *-------* B
  A

Точки A, B, C и D помечены в соответствии с их порядком, принятым в типе данных SQUARE.

Учитывая точку X и длину квадрата, функция генерирует четыре квадрата этой длины. Порядок этих квадратов (как указано их индексом в массиве tabSquares) следующий:

*-------*------*
|       |      |
| Sq-3  | Sq-2 |
|       |      |
*-------X------*
|       |      |
| Sq-0  | Sq-1 |
|       |      |
*-------*------*

Таким образом, tabSquares[0] - это квадрат, помеченный Sq-0, а pointA - левый нижний угол. Координата x этой точки на value единиц меньше, чем координата x данной точки, а координата y на value единиц больше, чем координата y данной точки. (x увеличивается слева направо, а y увеличивается сверху вниз - начало координат - верхний левый угол области рисования)

Таким образом:

tabSquares[0].pointA.dimX = point.dimX - value;
tabSquares[0].pointA.dimY = point.dimY + value;
0 голосов
/ 26 апреля 2010

Я полагаю, что код предназначен для создания набора из четырех квадратов, у каждого из которых есть стороны длины ', которые соединены вместе в сетку, центрированную вокруг точки' точка '.

Причина, по которой ониспользует + value и - value потому, что он вычисляет точки, составляющие эти другие квадраты.

, если точка (3,5) была передана, а значение было установлено как '2', тоэтот код создаст квадрат, начинающийся снизу слева в (1,3) и идущий вверху справа в (5,7).

Вы должны пройти через это на сетке, рисуя точки, так как они сохраняются вмассив.

простой короткий ответ

Он складывает и вычитает value

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...