Файл:Ледовый многоугольник.png
Содержимое страницы недоступно на других языках.
Материал из Викиучебника — открытых книг для открытого мира
Размер этого предпросмотра: 649 × 600 пкс. Другие разрешения: 260 × 240 пкс | 520 × 480 пкс | 737 × 681 пкс.
Исходный файл (737 × 681 пкс, размер файла: 32 Кб, MIME-тип: image/png)
Cведения об этом файле находятся на Викискладе?, хранилище изображений и мультимедиа для использования во всех проектах Фонда Викимедиа. |
Краткое описание
ОписаниеЛедовый многоугольник.png |
Русский: Ледовый многоугольник English: ice polygon |
Дата | |
Источник | Собственная работа |
Автор | Владислав Молдован |
pascal src code
uses GraphABC;
const
N = 4;
R = 300;
Inside = true;
K = 0.5;
procedure RLine(x, y, x1, y1: real):=Line(Round(x), Round(y), Round(x1), Round(y1));
procedure Draw(x, y, r, angle: real);
begin
var angle1 := DegToRad(angle);
var angle2 := DegToRad(angle - 90);
var x2 := x + r * Cos(angle1);
var y2 := y + r * Sin(angle1);
var mx := (x + x2) / 2;
var my := (y + y2) / 2;
var r2 := r / 2;
var r3 := r2 * K;
var cx := mx + r3 * Cos(angle2);
var cy := my + r3 * Sin(angle2);
RLine(x, y, x2, y2);
RLine(mx, my, cx, cy);
if r > 20 then
begin
Draw(x, y, r2, angle);
Draw(mx, my, r2, angle);
Draw(mx, my, r3, angle - 90);
Draw(cx, cy, r3, angle + 90);
end;
end;
function GetAngle(x, y, x2, y2: real): real;
begin
var angle := Abs(RadToDeg(ArcTan((y2 - y) / (x2 - x))));
if (x2 = x) and (y2 = y) then
Result := 0
else
if x2 > x then
if y2 > y then Result := angle else Result := 360 - angle
else
if y2 > y then Result := 180 - angle else Result := 180 + angle;
end;
procedure DrawIce(x, y, x1, y1: real):=Draw(x, y, sqrt(Sqr(x1 - x) + Sqr(y1 - y)), GetAngle(x, y, x1, y1));
begin
FloodFill(1, 1, clBlack);
SetPenColor(clCyan);
var Angle := 360 / N;
var W := Window.Width;
var H := Window.Height;
LockDrawing();
MaximizeWindow();
for var i := 0 to N - 1 do
begin
var ang1 := DegToRad(Angle * i);
var ang2 := DegToRad(Angle * (i + 1));
if not Inside then
DrawIce(W + R * Cos(ang1), H + R * Sin(ang1), W + R * Cos(ang2), H + R * Sin(ang2))
else
DrawIce(W + R * Cos(ang2), H + R * Sin(ang2), W + R * Cos(ang1), H + R * Sin(ang1));
end;
Redraw();
end.
Лицензирование
Я, владелец авторских прав на это произведение, добровольно публикую его на условиях следующей лицензии:
Этот файл доступен по лицензии Creative Commons Attribution-Share Alike 4.0 International
- Вы можете свободно:
- делиться произведением – копировать, распространять и передавать данное произведение
- создавать производные – переделывать данное произведение
- При соблюдении следующих условий:
- атрибуция – Вы должны указать авторство, предоставить ссылку на лицензию и указать, внёс ли автор какие-либо изменения. Это можно сделать любым разумным способом, но не создавая впечатление, что лицензиат поддерживает вас или использование вами данного произведения.
- распространение на тех же условиях – Если вы изменяете, преобразуете или создаёте иное произведение на основе данного, то обязаны использовать лицензию исходного произведения или лицензию, совместимую с исходной.
Элементы, изображённые на этом файле
изображённый объект
У этого свойства есть некоторое значение без элемента в
1 сентября 2017
История файла
Нажмите на дату/время, чтобы увидеть версию файла от того времени.
Дата/время | Миниатюра | Размеры | Участник | Примечание | |
---|---|---|---|---|---|
текущий | 09:32, 1 сентября 2017 | 737 × 681 (32 Кб) | Владислав Молдован | User created page with UploadWizard |
Использование файла
Следующая страница использует этот файл:
Метаданные
Файл содержит дополнительные данные, обычно добавляемые цифровыми камерами или сканерами. Если файл после создания редактировался, то некоторые параметры могут не соответствовать текущему изображению.
Горизонтальное разрешение | 37,79 точек на сантиметр |
---|---|
Вертикальное разрешение | 37,79 точек на сантиметр |