PDA

View Full Version : Simple Beautiful Curves



primo
22-07-2018, 13:48
i have found these shapes while experimenting with a variations of the Mystery Curve i have posted before here.
986998709871
note that they all have smooth vertices, look at the triangle carefully it has a slight concave edges so i consider it beautiful. it is suitable as a road sign, and all the people in the city will wonder why the Municipal make the sign concave a little !!.
some suggestions for other shapes:
1-to make it a convex triangle change s2 = 1/3 to s2 = 1/7
2- s = 1/19: s2 = 1/6 ' toon triangle
k = 3
suitable for Fred Flintstone mathematics school and also as a funny road sign
3- s = 0: s2 = 1/19 ' hexagon
k = 6 ' k=4 'square
4- uncomment lines 63 and 64 and you get full circle
there are many shapes by just changing the parameters.
5- note that they all can be considered a deformation of a circle made by a sewing thread manually
6- the usefulness of plotting these shapes in 3D engine instead of 2D canvas is to be able to rotate the shapes in any direction, and to be able to look at it from any perspective, also we can surround the curves by tubes (as demonstrated somewhere here) for 3D printing


Uses "TBGL"
Uses "math"
Begin Const
%listPoints = 1
End Const

Function TBMain()
Local hWnd As DWord
Local FrameRate As Double
' -- Create and show window
hWnd = TBGL_CreateWindowEx("Triangle proposed as a Road Sign - press ESC to quit", 600, 600, 32, %TBGL_WS_WINDOWED)' Or %TBGL_WS_CLOSEBOX)
TBGL_ShowWindow
TBGL_BackColor 255,255,255

FillArrays ' call the sub to create the List of vertices and color

' -- Resets status of all keys
TBGL_ResetKeyState()
TBGL_PointSize 2 'if you want thick points uncomment this line
' -- Main loop
While TBGL_IsWindow(hWnd)
'init
FrameRate = TBGL_GetFrameRate
TBGL_ClearFrame
TBGL_Camera(0, 0, 5, 0, 0, 0)
' -- Turn triangle around Z axis
TBGL_Rotate GetTickCount/50, 0, 0, 1

' -- Render it
TBGL_CallList %listPoints
TBGL_DrawFrame
' -- ESCAPE key to exit application
If TBGL_GetWindowKeyState(hWnd, %VK_ESCAPE) Then Exit While
Wend
' -- Destroying the buffer is not necessary,
' -- the garbage collector will take care of it

' -- Destroy window
TBGL_DestroyWindow
End Function

Sub FillArrays()
Dim x, y, z, t As Single
Dim N As DWord = 1
local s, s2, k as single

s = 0: s2 = 1/3 ' triangle
k = 3

's = 1/19: s2 = 1/6 ' toon triangle
'k = 3

's = 0: s2 = 1/19 ' hexagon
'k = 6

TBGL_NewList %listPoints
TBGL_BeginPoly(%GL_POINTS)

While t <= 2*Pi

x = s*Sin(t)* Sin(k* t) - s* Cos(k* t)* Cos(t) + Cos(t) + s2* Sin(k* t)* Cos(t) - s2* Sin(t)* Cos(k* t)
y = Sin(t) + s2* Sin(t)* Sin(k* t) + s2* Cos(t)* Cos(k* t) - s* Sin(t)* Cos(k* t) - s* Sin(k* t)* Cos(t)
'x = Cos(t) + s* Sin(k* t)* Cos(t) - s* Sin(t)* Cos(k* t)
'y = Sin(t) + s* Sin(t)* Sin(k* t) + s* Cos(t)* Cos(k* t)

TBGL_Color 255, 0, 0
TBGL_Vertex x, y , z
t + 2*PI/1000

Wend
TBGL_EndPoly
TBGL_EndList

End Sub