Построить мозаику из n правильных n угольников - QBasic
Формулировка задачи:
Построить мозаику из правильных n угольников заданного размера, закрасив их разными цветами или применив разные типы штриховок.
n угольник без размеров
Листинг программы
- INPUT "‘Количество углов"; n
- SCREEN 1
- FOR i = 1 TO n
- LINE (100 + 70 * (SIN(i * 6.28 / n)), 100 + 70 * (COS(i * 6.28 / n)))-(100 + 70 * (SIN((i + 1) * 6.28 / n)), 100 + 70 * (COS((i + 1) * 6.28 / n)))
- NEXT i
Решение задачи: «Построить мозаику из n правильных n угольников»
textual
Листинг программы
- CONST Pi = 3.141592653589793#
- DECLARE SUB NUgoln (x%, y%, R%, cv%)
- DIM SHARED St AS INTEGER, Stu AS SINGLE, R AS INTEGER, n AS INTEGER
- SCREEN 12
- LOCATE 2, 10: INPUT "R opisannoi okrujnosti : ", R
- LOCATE 3, 10: INPUT "Tip mnogougolnika [1-3] : ", NTp%
- LOCATE 20, 10: PRINT "- Lubaya knopka dlya vihoda -"
- CLS 1
- IF NTp% < 1 OR NTp% > 3 OR R < 1 THEN END
- SELECT CASE NTp%
- CASE 1: n = 3: Stu = Pi / 6: Stu2 = Stu + Pi
- CASE 2: n = 4: Stu = Pi / 4
- CASE 3: n = 6
- END SELECT
- St = R * 2 * SIN(Pi / n)
- Dv = St / (2 * TAN(Pi / n))
- Dv2 = St / 2 * TAN(Pi / n)
- SELECT CASE NTp%
- CASE 1: PlusX1 = St: PlusY1 = Dv2: PlusX2 = St / 2: PlusY2 = -Dv
- CASE 2: PlusX1 = St: PlusY1 = St
- CASE 3: PlusX1 = R * 1.5: PlusY1 = Dv * 2: PlusX2 = 0: PlusY2 = Dv
- END SELECT
- y = 0
- DO
- x = (St AND 1) * PlusX2 ' Смещаем старт позицию для треуг. и шестиуг.
- St = St + 1
- DO
- ' Строим многоугольник в нуле
- NUgoln INT(x), INT(y), R, RND * 14 + 1
- ' Если шестиугольник
- IF NTp% <> 2 THEN
- savey = y ' Cохраним высоту
- y = y + PlusY2 ' Шаг по Y
- x = x + PlusX1 ' Шаг по X
- IF NTp% = 1 THEN SWAP Stu, Stu2: x = x - PlusX2
- NUgoln INT(x), INT(y), R, RND * 14 + 1
- IF NTp% = 1 THEN SWAP Stu, Stu2: x = x - PlusX2
- y = savey
- END IF
- x = x + PlusX1 ' Шагаем направо на длину многоугольника
- IF INKEY$ <> "" THEN END
- LOOP UNTIL x > 640
- y = y + PlusY1
- LOOP UNTIL y > 480
- SUB NUgoln (x%, y%, R%, cv%)
- xo% = INT(COS(Stu) * R%) + x%
- yo% = INT(SIN(Stu) * R%) + y%
- FOR i = 1 TO n
- xn% = INT(COS((i * 2 * Pi / n) + Stu) * R%) + x%
- yn% = INT(SIN((i * 2 * Pi / n) + Stu) * R%) + y%
- LINE (xo%, yo%)-(xn%, yn%), cv%
- xo% = xn%: yo% = yn%
- NEXT
- PAINT (x%, y%), cv%, cv%
- END SUB
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д