Derivatives: Difference between revisions

From Legacy Roblox Wiki
Jump to navigationJump to search
>Camoy
formatted
>NXTBoy
Heading levels
Line 1: Line 1:
==Derivatives==
 
===Goal===
==Goal==
This page will help smooth out your [[Terrain Generation|Terrains]], if you use mathematical formulae to create them.  In ROBLOX, however, we do not work with mathematical "points", but "bricks", which occupy space.  Therefore, in order to smooth out terrains and functions, you will want to know the slopes of your functions... to know the slopes of your terrains.
This page will help smooth out your [[Terrain Generation|Terrains]], if you use mathematical formulae to create them.  In ROBLOX, however, we do not work with mathematical "points", but "bricks", which occupy space.  Therefore, in order to smooth out terrains and functions, you will want to know the slopes of your functions... to know the slopes of your terrains.


[[Image:Derivative.PNG|thumb|150px|An example of how you can use Derivatives]]
[[Image:Derivative.PNG|thumb|150px|An example of how you can use Derivatives]]


===Introduction===
==Introduction==
A derivative is the slope of a function, or, phrased differently, the difference in the height divided by the difference in width at that point.
A derivative is the slope of a function, or, phrased differently, the difference in the height divided by the difference in width at that point.


Line 57: Line 57:
</pre>}}
</pre>}}


===3D Terrain===
==3D Terrain==


[[Image:Smooth.PNG|thumb|150px|Smoothed out 3D terrain]]
[[Image:Smooth.PNG|thumb|150px|Smoothed out 3D terrain]]
Line 81: Line 81:
</pre>}}
</pre>}}


===See Also===
==See Also==
*[[Ramps]]
*[[Ramps]]
*[[Terrain Generation]]
*[[Terrain Generation]]

Revision as of 12:05, 11 March 2012

Goal

This page will help smooth out your Terrains, if you use mathematical formulae to create them. In ROBLOX, however, we do not work with mathematical "points", but "bricks", which occupy space. Therefore, in order to smooth out terrains and functions, you will want to know the slopes of your functions... to know the slopes of your terrains.

An example of how you can use Derivatives

Introduction

A derivative is the slope of a function, or, phrased differently, the difference in the height divided by the difference in width at that point.

The Ramps article provides a method on how to rotate a brick:

Example
game.Workspace.slope.CFrame = CFrame.new(Vector3.new(0, 100, 0)) * CFrame.fromAxisAngle(Vector3.new(0, 0, 1), math.pi / 2)


Here we have the brick being created in its position in the first CFrame, and the rotation in the second CFrame. This is where the derivative comes in. In the script below, z=-x^2. The derivative for this is -2*x. (Why does -x work better than -2*x???)

Example
local x, z = 0, 0
for i = -1.8, 1.8, .01 do
    x = i
    y = -i ^ 2

    local p = Instance.new('Part')
    p.CFrame = CFrame.new(Vector3.new(100 * x + 100, 100 * y + 100, 100)) * CFrame.fromAxisAngle(Vector3.new(0, 0, 1), -x)
    p.Size = Vector3.new(1, 10, 1)
    p.Anchored = true
    p.BottomSurface = 'Smooth'
    p.TopSurface = 'Smooth'
    p.Parent = game.Workspace
    p.BrickColor = BrickColor.new(217)
end


You can smooth out trigonometric functions, too.

Sin wave (yes, it's flipped around)
Example
local x, y = 0, 0
for i = -2.5, 2.5, .01 do
    x = i
    y = math.sin(i) -- here is the formula

    local p = Instance.new('Part')
    p.CFrame = CFrame.new(Vector3.new(10 * x, 10 * y, 10)) * CFrame.fromAxisAngle(Vector3.new(0, 0, 1), math.cos(i)) 

    --cos is the derivative of sin

    p.Size = Vector3.new(1,1,1)
    p.Anchored = true
    p.BottomSurface = 'Smooth'
    p.TopSurface = 'Smooth'
    p.Parent = game.Workspace
    p.BrickColor = BrickColor.new(217)
end


3D Terrain

Smoothed out 3D terrain

This is the sinx+siny formula from Terrain Generation, only smoothed out now. (This needs to be double checked.)

Example
local x, y = 0, 0
for i = -2,2, .1 do
    for j = -2,2, .1 do
        y = math.sin(i) + math.sin(j) -- here is the formula

        local p = Instance.new('Part')
        p.CFrame=CFrame.new(Vector3.new(10 * i, 10 * y, 10 * j)) * CFrame.fromAxisAngle(Vector3.new(0, 0, 1), math.cos(i) + math.cos(j)) 
        p.Size = Vector3.new(1,1,1)
        p.Anchored = true
        p.BottomSurface = "Smooth"
        p.TopSurface = "Smooth"
        p.Parent = game.Workspace
        p.BrickColor = BrickColor.new(217)
    end
end


See Also