Vanwege het ontwerpen van letttertypen moet ik regelmatig cirkels en cirkelbogen maken. Omdat ik geen zin meer had om bijna-optimale cirkelbogen uit mijn hoofd te rekenen, besloot ik om een keer te programmeren. Ik heb dus een beetje knip- en plakwerk gedaan van voorbeeldscripts en -functies, en het werkt allemaal prima, behalve als ik een betere boog wil dan 295661502 groot. Uit mijn hoofd kwam ik zelf weliswaar niet verder dan de boog van 198 groot, maar ik weet niet hoe ik de hoeveelheid decimalen van een "double"-type vergroot.
R is de maximale radius van de boog, en daarna geeft het programma de coöridinaten van alle mogelijke bogen, met de afwijking ten opzichte van een werkelijke boog op het eind.
R is de maximale radius van de boog, en daarna geeft het programma de coöridinaten van alle mogelijke bogen, met de afwijking ten opzichte van een werkelijke boog op het eind.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| #include <iostream> #include <cmath> using namespace std; int main() { int h; cout << "R="; cin >> h; double b = 1; double e = 1; int f = 1; int g = 1; for (int a = 1; h >= 2*a; a++) { b = a*sqrt(2); int c = b; double d = c-b; if (d < 0) { d = d*-1; } if (d < e) { e = d; f = b; g = a; cout << "(0,0) (0," << g*2 << ") (" << 2*(f-g) << "," << g*2 << ") (" << f << "," << f << ") (" << g*2 << "," << 2*(f-g) << ") (" << g*2 << ",0) D:" << e << endl; } a = a+1; } return 0; } |