Comments 35
Очень нестандартная идея)
Только вот у вас «квадрат» 8 на 9 получился…
Только вот у вас «квадрат» 8 на 9 получился…
+18
При использовании шрифта, который я использую когда программирую, круг и квадрат были ровненькими и красивыми (визуально). Это главное, так как искажение из-за того что буквы неквадратные для круга и квадрата одинаковое (собственно это некий коэфициент, который попадает как в числитель, так и в знаменатель дроби o/k, и в итоге сокращается).
-6
По моему главное — это как раз количество единиц площади (символов в данном случае), и неважно, что визуально эллипс, просто проекция такая. А в итоге не коэффициент, а слагаемое, т. е. что-то типа (o+n)/(k+m) — что никак не сокращается.
+19
Пусть у нас буквы квадратные. Тогда всё вроде понятно, чем картинка больше, тем результат лучше, В основном благодаря тому, что круг все ближе к настоящему кругу.
Теперь мы поменяли шрифт в котором, для простоты, ширина букв соотносится с высотой как 1/2.
Понятно, что если мы просто вычеркнем строчки через одну, то квадрат вообще останется квадратом (особенно, если число строк четное), а круг тоже получится вполне ровненький.
Также понятно, что оба числа и o и k просто уменьшаться в два раза.
Теперь мы поменяли шрифт в котором, для простоты, ширина букв соотносится с высотой как 1/2.
Понятно, что если мы просто вычеркнем строчки через одну, то квадрат вообще останется квадратом (особенно, если число строк четное), а круг тоже получится вполне ровненький.
Также понятно, что оба числа и o и k просто уменьшаться в два раза.
-1
Это справедливо будет только если в одной половине круга оставлять те строчки (столбцы), которые мы вычеркнули в другой.
+1
Так и будет если в исходной картинке число строчек, которыми нарисован круг, чётное.
Естественно, этот коэффициент в итоге не равен соотношению сторон шрифта, но он стремится к нему с ростом размера картинки. Совсем точно, конечно, не получится, также как с этим же ростом результат стремится к пи, но совсем точное пи не получится, так как пи число иррациональное и не может быть полученно в результате деления двух целых чисел.
На этом предлагаю обсуждение квадратуры круга закончить ;)
Естественно, этот коэффициент в итоге не равен соотношению сторон шрифта, но он стремится к нему с ростом размера картинки. Совсем точно, конечно, не получится, также как с этим же ростом результат стремится к пи, но совсем точное пи не получится, так как пи число иррациональное и не может быть полученно в результате деления двух целых чисел.
На этом предлагаю обсуждение квадратуры круга закончить ;)
0
Меня смущает что давно известное приближение 22/7 куда более точное, чем то, что у вас. Хотя в вашем круге явно больше 22 букв O, а в квадрате больше 7 букв K.
-1
Ну, из семи букв квадрат не очень красивый получится.
Можно домножить 22/7 на 7/7 и рисовать квадрат из 49 букв, а круг из 154 соответвенно. Но это будет чит :)
Тут как раз фокус в том, что чем красивее (и больше) мы рисуем картинку, тем точнее вычисляем число пи, при этом ничего ни про какие известные приближения нам знать не надо.
Можно домножить 22/7 на 7/7 и рисовать квадрат из 49 букв, а круг из 154 соответвенно. Но это будет чит :)
Тут как раз фокус в том, что чем красивее (и больше) мы рисуем картинку, тем точнее вычисляем число пи, при этом ничего ни про какие известные приближения нам знать не надо.
0
Да и у круга эксцентриситет чуть больше нуля всё же.
0
И круг не круглый, а элипс с осями 18 и 31 буквы
0
В 90-х книжка у меня была что-то типа «100 интересных задач по программированию», по-моему там я этот круг видел.
+3
Пожалуйста, поднесите к камере айфон для калибровки числа Пи.
+16
Есть ещё такой вариант:
Ссылка на источник: www.xakep.ru/magazine/xa/121/102/1.asp
Это не шутка! Программа для расчета числа «пи». Да-да, именно расчета, а не вывода готовой константы посредством сопроцессора. Чем больше круг — тем выше точность расчетов.
/*
* Program to compute an approximation of pi
* by Brian Westley, 1988
*/
#define _ 0xF<00? --F<00||--F-OO--:-F<00||--F-OO--;
int F=00,OO=00;
main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}
Ссылка на источник: www.xakep.ru/magazine/xa/121/102/1.asp
+3
О, классно, эта версия подправлена под современные препроцессоры, и выдает правильный ответ.
Но смысла, кроме символического, в том, что нарисован круг здесь нет. А у меня картинка имеет прямой геометрический смысл.
Но смысла, кроме символического, в том, что нарисован круг здесь нет. А у меня картинка имеет прямой геометрический смысл.
0
Ой, а они там пишут, что чем больше круг, тем точнее пи. Придется разбираться, что эта программка делает, если геометрический смысл есть, то добавлю в топик уточнение. Но в любом случае, у меня гораздо понятнее.
0
Я бы не сказал что так уж прямо понятнее. У них всё тоже просто: "_" считают строки, "-_" считают точки внутри круга. Дальше — делим площадь квадрата на площадь круга. Та же идея, что и у вас, только всё в одном месте и вместо площади квадрата у нас есть его сторона. Конечно тут предполагаются-таки квадратные символы иначе ничего не выйдет!
+1
Это вы еще наверное www.ioccc.org/ не видели, там таких программ полно.
+2
UFO just landed and posted this here
И все-таки у вас овал и прямоугольник. А суть идеи в геометрической правильности фигур. Симметрии явно не хватает фигурам.
При квадрате 8х8 наиболее точное вычисление, которое можно получить, это 3,125. (3,14 умножаем на 64, ищем ближайшее число, делящееся без остатка на 8, получаем 200, и с такой площадью рисуем круг):
При квадрате 9х9 уже можно будет получить 3,1605.
При квадрате 8х8 наиболее точное вычисление, которое можно получить, это 3,125. (3,14 умножаем на 64, ищем ближайшее число, делящееся без остатка на 8, получаем 200, и с такой площадью рисуем круг):
O O O O K K K K K K K K
O O O O O O O O O O K K K K K K K K
O O O O O O O O O O O O K K K K K K K K
O O O O O O O O O O O O O O K K K K K K K K
O O O O O O O O O O O O O O K K K K K K K K
O O O O O O O O O O O O O O K K K K K K K K
O O O O O O O O O O O O O O O O K K K K K K K K
O O O O O O O O O O O O O O O O K K K K K K K K
O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O O O
O O O O O O O O O O O O O O
O O O O O O O O O O O O O O
O O O O O O O O O O O O O O
O O O O O O O O O O O O
O O O O O O O O O O
O O O O
При квадрате 9х9 уже можно будет получить 3,1605.
+2
Что, кстати, намекает на то, что увеличение размеров в данном случае не всегда будет увеличивать точность. Во всяком случае до тех пор, пока круг не будет приближен к реальному.
0
Но ряд сходится?
+1
О каком ряде речь-то?
В целом, при значительном увеличении фигур, искомое число приближается к Пи. Скажем, при радиусе (и стороне квадрата) в 100 единиц уже получается 3,1416. Но незначительное увеличение (на единицу, например) не обязательно даст уточнение результата. Полагаю, это связано с ярко выраженной дискретностью и тем, что «изображение» круга из немного большего числа единиц площади может оказаться менее близким к идеальному.
В целом, при значительном увеличении фигур, искомое число приближается к Пи. Скажем, при радиусе (и стороне квадрата) в 100 единиц уже получается 3,1416. Но незначительное увеличение (на единицу, например) не обязательно даст уточнение результата. Полагаю, это связано с ярко выраженной дискретностью и тем, что «изображение» круга из немного большего числа единиц площади может оказаться менее близким к идеальному.
+1
А почему на 8? По осям симметрии?
0
Вот о чём нужно давать тестовые задания на собеседованиях :)
-20
— Здравствуйте. Вы претендуете на вакансию Сеньор ПХП Девелопер. Напишите мне функцию в форме круга, вычисляющую число Пи.
— До свидания.
— До свидания.
+41
Мне уже за этот комментарий три минуса в карму поставили. Довожу до сведения минусующих, что сия ироничная ремарка сделана с намёком на предыдущий пост автора.
Я так понимаю, смайлик в предложении не сигнализирует что это шутка. Надо будет в другой раз обрамлять тегом sarcasm, irony или что-то в этом духе.
Я так понимаю, смайлик в предложении не сигнализирует что это шутка. Надо будет в другой раз обрамлять тегом sarcasm, irony или что-то в этом духе.
+1
Преимущество такого подхода ещё в том, что при должной оптимизации число π будет вычислено ещё на этапе компиляции.
+8
В старой книжке Expert C Programming (http://www.e-reading.co.uk/bookreader.php/138815/Linden_-_Expert_C_Programming:_Deep_C_Secrets.pdf) есть такой пример:
<code>
#define X )*2+1
#define _ )*2
#define s ((((((((((((((((0 /* For building glyphs 16 bits
wide */
/* They enable you to create the hex patterns for icons, glyphs, etc., by drawing a picture of the image
you want! What could be better for making a program self-documenting? Using these defines, the
example is transformed into: */
static unsigned short stopwatch[] =
{
s _ _ _ _ _ X X X X X _ _ _ X X _ ,
s _ _ _ X X X X X X X X X _ X X X ,
s _ _ X X X _ _ _ _ _ X X X _ X X ,
s _ X X _ _ _ _ _ _ _ _ _ X X _ _ ,
s _ X X _ _ _ _ _ _ _ _ _ X X _ _ ,
s X X _ _ _ _ _ _ _ _ _ _ _ X X _ ,
s X X _ _ _ _ _ _ _ _ _ _ _ X X _ ,
s X X _ X X X X X _ _ _ _ _ X X _ ,
s X X _ _ _ _ _ X _ _ _ _ _ X X _ ,
s X X _ _ _ _ _ X _ _ _ _ _ X X _ ,
s _ X X _ _ _ _ X _ _ _ _ X X _ _ ,
s _ X X _ _ _ _ X _ _ _ _ X X _ _ ,
s _ _ X X X _ _ _ _ _ X X X _ _ _ ,
s _ _ _ X X X X X X X X X _ _ _ _ ,
s _ _ _ _ _ X X X X X _ _ _ _ _ _ ,
s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
};
</code>
+4
Sign up to leave a comment.
Единство формы и содержания