VB6利用win32API畫玫瑰花演算法

2021-07-24 16:08:55 字數 2953 閱讀 3510

這是以前找到的乙個vb程式,作者已經不可得知。

昨天晚上與朋友聊畫圖演算法的時候我突然想到了這個程式。

演算法並不是太難,

利用三角函式畫出圖形輪廓。

接著利用api函式填充圖形。

核心演算法如下:

private sub comp(a as double, b as double, c as double)

dim j as long

dim aa as double, bb as double

dim n as double, o as double

dim w as double, z as double

if c > 60 then ' 花莖

ds.a = sin(a * 7) * (13 + 5 / (0.2 + (b * 4) ^ 4)) - sin(b) * 50

ds.b = b * f + 50

ds.c = 625 + cos(a * 7) * (13 + 5 / (0.2 + (b * 4) ^ 4)) + b * 400

ds.d = a - b / 2

ds.e = a

exit sub

end if

aa = a * 2 - 1

bb = b * 2 - 1

if aa * aa + bb * bb < 1 then

if c > 37 then '花葉

j = int(c) and 1

n = iif(j, 6, 4)

o = 0.5 / (a + 0.01) + cos(b * 125) * 3 - a * 300

w = b * h

ds.a = o * cos(n) + w * sin(n) + j * 610 - 390

ds.b = o * sin(n) - w * cos(n) + 550 - j * 350

ds.c = 1180 + cos(bb + aa) * 99 - j * 300

ds.d = 0.4 - a * 0.1 + ((1 - bb * bb) ^ (-h * 6)) * 0.15 - a * b * 0.4 + cos(a + b) / 5 + (cos((o * (a + 1) + (iif(bb > 0, w, -w))) / 25) ^ 30) * 0.1 * (1 - bb * bb)

ds.e = o / 1000# + 0.7 - o * w * 0.000003

elseif c > 32 then '萼片

c = c * 1.16 - 0.15

o = a * 45 - 20

w = b * b * h

z = o * sin(c) + w * cos(c) + 620

ds.a = o * cos(c) - w * sin(c)

ds.b = 28 + cos(bb * 0.5) * 99 - b * b * b * 60 - z / 2 - h

ds.c = z

ds.d = (b * b * 0.3 + ((1 - a * a) ^ 7) * 0.15 + 0.3) * b

ds.e = b * 0.7

else '花

o = aa * (2 - b) * (80 - c * 2)

w = 99 - cos(aa) * 120 - cos(b) * (-h - c * 4.9) + cos((1 - b) ^ 7) * 50 + c * 2

z = o * sin(c) + w * cos(c) + 700

ds.a = o * cos(c) - w * sin(c)

ds.b = bb * 99 - cos(b ^ 7) * 50 - c / 3 - z / 1.35 + 450

ds.c = z

ds.d = (1 - b / 1.2) * 0.9 + a * 0.1

ds.e = ((1 - b) ^ 20) / 4 + 0.05

end if

end if

end sub

private sub drawrose()

dim x as long, y as long

static i as long

dim j as long

dim x1 as long, y1 as long

dim z as long

dim r as long, g as long

dim b as long

dim q as long

x = 1: y = 1:

x1 = 1: y1 = 1

z = 1

r = 255

j = i mod 46

comp rnd, rnd, j / 0.74

i = i + 1

z = ds.c

if z = 0 then z = 1

x = ds.a * f / z - h

y = ds.b * f / z - h

x = x / 2

y = y / 2

q = y * f + x

if not ((not m(q)) or m(q) > z) then exit sub

m(q) = z

r = ds.d * h

g = ds.e * h

b = ds.d * ds.d * (-80)

setpixel me.hdc, x, y, rgb(abs(r), abs(g), abs(b))

end sub

掃雷程式 win32API

1 已實現功能 基本的掃雷方塊的展開,方塊周圍雷數的計算,方塊的標旗,勝負的判斷,難度的更改 2 未實現功能 控制台顯示剩餘標旗數量和當前所用時間,選單項的豐富 3 基本原理 使用一張二維int表儲存每個方格的數字資訊,其中9表示雷 將整個雷區 客戶區 按難度分割成方格,每個方格為乙個靜態控制項,用...

MFC 利用Win32 API遍歷檔案系統

1.遍歷檔案系統所需的工具 1 mfc的cfile並沒有對遍歷檔案系統的功能進行物件導向包裝,因此遍歷檔案系統必須使用較為原始 底層的win32 api 2 大致步驟是 i.使用 setcurrentdirectory函式設定當前處於什麼目錄下 windows中叫做資料夾 ii.使用 findfir...

多執行緒程式設計win32 API

win32 提供了一系列的api函式來完成執行緒的建立 掛起 恢復 終結以及通訊等工作。下面將選取其中的一些重要函式進行說明。1 handle createthread lpsecurity attributes lpthreadattributes,dword dwstacksize,lpthre...