Ставки приховані
Ставки поки відсутні
Ставки приховані
Ставки приховані
-
Богдан Ткачук 21 січняimport numpy as np
from scipy.spatial import Voronoi
import svgwrite
import random
def draw_puzzle_path(dwg, p1, p2, thickness=0.3):
"""Малює витончений замок пазла з плавними переходами"""
p1 = np.array(p1)
p2 = np.array(p2)
dist = np.linalg.norm(p2 - p1)
# Якщо лінія занадто коротка, малюємо просто пряму
if dist < 5:
dwg.add(dwg.line(start=p1, end=p2, stroke='black', stroke_width=thickness))
return
v = (p2 - p1) / dist
n = np.array([-v[1], v[0]]) # Перпендикуляр
side = random.choice([-1, 1])
# Пропорції замка (можна змінювати для дизайну)
base_w = 0.35 # Де починається звуження (35% від довжини)
neck_w = 0.10 # Ширина вузької частини
head_w = 0.25 # Ширина самої "головки"
head_h = 0.20 # Висота вильоту вушка
# Ключові точки вздовж лінії
m = (p1 + p2) / 2
q1 = p1 + v * dist * (0.5 - base_w/2)
q2 = p1 + v * dist * (0.5 + base_w/2)
# Точки вигину вушка
h1 = m - v * (dist * neck_w) + n * (dist * head_h * side)
h2 = m + v * (dist * neck_w) + n * (dist * head_h * side)
# Формування кривої: Пряма -> Плавний вхід -> Головка -> Плавний вихід -> Пряма
path_data = f"M {p1[0]},{p1[1]} L {q1[0]},{q1[1]} "
path_data += f"C {q1[0]+n[0]*2},{q1[1]+n[1]*2} {h1[0]},{h1[1]} {h1[0]},{h1[1]} "
path_data += f"S {q2[0]+n[0]*2},{q2[1]+n[1]*2} {q2[0]},{q2[1]} "
path_data += f"L {p2[0]},{p2[1]}"
dwg.add(dwg.path(d=path_data, stroke='black', fill='none', stroke_width=thickness))
def generate_final_puzzle(filename, width=300, height=300, n_pieces=110):
dwg = svgwrite.Drawing(filename, size=(f"{width}mm", f"{height}mm"), viewBox=f"0 0 {width} {height}")
# Генерація випадкових центрів деталей
points = np.column_stack((
np.random.uniform(2, width-2, n_pieces),
np.random.uniform(2, height-2, n_pieces)
))
# Додавання технічних точок за межами для гарних країв
margin = 100
outer_points = [
[-margin, -margin], [width+margin, -margin],
[-margin, height+margin], [width+margin, height+margin],
[width/2, -margin], [width/2, height+margin],
[-margin, height/2], [width+margin, height/2]
]
points = np.append(points, outer_points, axis=0)
vor = Voronoi(points)
# Малювання ліній
for ridge in vor.ridge_vertices:
if -1 not in ridge:
v1 = vor.vertices[ridge[0]]
v2 = vor.vertices[ridge[1]]
# Малюємо тільки те, що потрапляє в робочу область
if (0 <= v1[0] <= width and 0 <= v1[1] <= height) and \
(0 <= v2[0] <= width and 0 <= v2[1] <= height):
draw_puzzle_path(dwg, v1, v2)
# Зовнішня рамка
dwg.add(dwg.rect(insert=(0,0), size=(width, height), stroke='black', fill='none', stroke_width=0.5))
dwg.save()
if __name__ == "__main__":
generate_final_puzzle("puzzle_layout_v2.svg")
print("Файл 'puzzle_layout_v2.svg' успішно згенеровано.")
Актуальні фриланс-проєкти в категорії C та C++
Що потрібно зробити: розробити EXE-додаток на C++; створити сучасний графічний інтерфейс відповідно до мого дизайну; реалізувати логіку роботи програми; забезпечити стабільну роботу на Windows 10 та Windows 11; надати вихідний код Visual Studio (.sln, .vcxproj). У мене вже є: дизайн інтерфейсу (скріншоти додаю); концепція роботи програми; перелік функцій, який обговоримо з виконавцем. Вимоги до виконавця: впевнене знання C++; досвід роботи у Microsoft Visual Studio; досвід розробки Windows Desktop-додатків; акуратний та читабельний код; готовність підтримувати зв'язок під час розробки. Будь ласка, у відповіді надішліть: приклади ваших EXE-програм; досвід роботи з C++; орієнтовний термін виконання; вартість роботи.
Доброго дня Необхідно створити модуль, що будет працювати із БД Firebird на C++ для продажу товарів. Є приклади готових рішень та опис функціоналу модуля. Основні функції: авторизація, вибір товару на екрані з груп/підгруп, перехід в кошик, оплата карткою та друк чека. Програма повинна працювати на Windows 10 і вище, використовувати існуючу базу даних.
Потрібно розробити патч для драйвера відеокарти, який розширює можливості управління графічним адаптером за рахунок додавання додаткових користувацьких налаштувань. Патч має інтегруватися в існуючу архітектуру драйвера без порушення його основної функціональності та забезпечувати сумісність з підтримуваними версіями операційної системи. Основною метою є надання більш гнучкого доступу до параметрів, які недоступні в стандартній панелі управління драйвером, з можливістю їх зміни через користувацький інтерфейс або програмний API. Патч має передбачати модульну структуру, що дозволяє в подальшому додавати нові параметри без суттєвої переробки коду. Необхідно забезпечити коректну обробку помилок, журналювання змін, можливість відкату налаштувань до значень за замовчуванням, а також збереження сумісності з майбутніми оновленнями драйвера, наскільки це можливо. Рішення має супроводжуватися технічною документацією з описом архітектури, реалізованих можливостей, обмежень і рекомендацій щодо тестування.