Можно найти перекрытие на x и на оси y и умножить тех.
int LineOverlap(int line1a, line1b, line2a, line2b)
{
// assume line1a <= line1b and line2a <= line2b
if (line1a < line2a)
{
if (line1b > line2b)
return line2b-line2a;
else if (line1b > line2a)
return line1b-line2a;
else
return 0;
}
else if (line2a < line1b)
return line2b-line1a;
else
return 0;
}
int RectangleOverlap(Rect rectA, rectB)
{
return LineOverlap(rectA.x1, rectA.x2, rectB.x1, rectB.x2) *
LineOverlap(rectA.y1, rectA.y2, rectB.y1, rectB.y2);
}
Если вы хотите сохранить символы новой строки, заключите переменную в двойные кавычки:
echo "$stuff"
Когда вы пишете ее без двойных кавычек, оболочка расширяет $ stuff
в список слов, разделенных пробелами (где «слова» - это последовательности непробельных символов, а символы пробела - это пробелы, табуляции и новые строки; после экспериментов кажется, что формы , возврат каретки и пробелы не считаются пробелом).
Демонстрация интерпретации управляющих символов как пробелов. ASCII 8 - возврат, 9 - табуляция, 10 - новая строка (LF), 11 - вертикальная табуляция, 12 - подача страницы, 13 - возврат каретки. Первая команда генерирует последовательность символов, разделенных различными управляющими символами. Вторая команда повторяет результат с сохранением исходных символов - см. Шестнадцатеричный дамп. Третья команда отображает результат, когда оболочка разделяет слова; вы можете видеть, что табуляция и новая строка были заменены пустым (0x20).
$ x=$(./ascii 64 65 8 66 67 9 68 69 10 70 71 11 72 73 12 74 75 13 76 77)
$ echo "$x" | odx
0x0000: 40 41 08 42 43 09 44 45 0A 46 47 0B 48 49 0C 4A @A.BC.DE.FG.HI.J
0x0010: 4B 0D 4C 4D 0A K.LM.
0x0015:
$ echo $x | odx
0x0000: 40 41 08 42 43 20 44 45 20 46 47 0B 48 49 0C 4A @A.BC DE FG.HI.J
0x0010: 4B 0D 4C 4D 0A K.LM.
0x0015:
$