wip: depth gradien on regular grid
This commit is contained in:
14
Batman.sln
14
Batman.sln
@@ -14,8 +14,6 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Build", "Build.fsproj", "{5
|
||||
EndProject
|
||||
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "src", "src/Batman.fsproj", "{9EBF5E9B-ED3E-4CEB-ABD4-E03F92AD45C9}"
|
||||
EndProject
|
||||
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "test", "test\Tests.fsproj", "{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -55,18 +53,6 @@ Global
|
||||
{9EBF5E9B-ED3E-4CEB-ABD4-E03F92AD45C9}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{9EBF5E9B-ED3E-4CEB-ABD4-E03F92AD45C9}.Release|x86.Build.0 = Release|Any CPU
|
||||
|
||||
{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}.Release|x64.Build.0 = Release|Any CPU
|
||||
{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{E2472750-93E4-4A7B-9DF3-A39BB5D6E8C4}.Release|x86.Build.0 = Release|Any CPU
|
||||
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
|
||||
@@ -84,30 +84,59 @@ let interp3 (datapoints: (float * float * float) []) (grid: (float * float) [,])
|
||||
(x, y, h))
|
||||
|
||||
let flat2Darray array2D =
|
||||
seq { for i in [0..(Array2D.length1 array2D) - 1] do
|
||||
for j in [0..(Array2D.length2 array2D) - 1] do
|
||||
yield array2D[i, j] }
|
||||
|> Seq.toArray
|
||||
seq {
|
||||
for i in [ 0 .. (Array2D.length1 array2D) - 1 ] do
|
||||
for j in [ 0 .. (Array2D.length2 array2D) - 1 ] do
|
||||
yield array2D[i, j]
|
||||
}
|
||||
|> Seq.toArray
|
||||
|
||||
let smooth9 (grid: (float * float * float) [,]) =
|
||||
let n1 = Array2D.length1 grid
|
||||
let n2 = Array2D.length2 grid
|
||||
let smoothed =
|
||||
grid
|
||||
|> Array2D.mapi (fun i j _ ->
|
||||
let g2d =
|
||||
if i=0 && j>0 && j<n2-1 then
|
||||
grid[i .. i + 1, j - 1 .. j + 1]
|
||||
elif i=n1-1 && j>0 && j<n2-1 then
|
||||
grid[i - 1 .. i, j - 1 .. j + 1]
|
||||
elif i > 0 && i < n1-1 && j=0 then
|
||||
grid[i - 1 .. i + 1, j .. j + 1]
|
||||
elif i > 0 && i < n1-1 && j = n2-1 then
|
||||
grid[i - 1 .. i + 1, j - 1 .. j]
|
||||
else
|
||||
grid[i - 1 .. i + 1, j - 1 .. j + 1]
|
||||
let g1d = flat2Darray g2d
|
||||
let x, y, h = Array.unzip3 g1d
|
||||
let d = h |> Array.map (fun r -> r / float h.Length) |> Array.sum
|
||||
x,y,d)
|
||||
smoothed
|
||||
grid
|
||||
|> Array2D.mapi (fun i j _ ->
|
||||
let g2d =
|
||||
if i = 0 && j > 0 && j < n2 - 1 then
|
||||
grid[i .. i + 1, j - 1 .. j + 1]
|
||||
elif i = n1 - 1 && j > 0 && j < n2 - 1 then
|
||||
grid[i - 1 .. i, j - 1 .. j + 1]
|
||||
elif i > 0 && i < n1 - 1 && j = 0 then
|
||||
grid[i - 1 .. i + 1, j .. j + 1]
|
||||
elif i > 0 && i < n1 - 1 && j = n2 - 1 then
|
||||
grid[i - 1 .. i + 1, j - 1 .. j]
|
||||
elif i = 0 && j = 0 then
|
||||
grid[i .. i + 1, j .. j + 1]
|
||||
elif i = n1 - 1 && j = n2 - 1 then
|
||||
grid[i - 1 .. i, j - 1 .. j]
|
||||
else
|
||||
grid[i - 1 .. i + 1, j - 1 .. j + 1]
|
||||
let g1d = flat2Darray g2d
|
||||
let x, y, h = Array.unzip3 g1d
|
||||
let d =
|
||||
h
|
||||
|> Array.map (fun r -> r / float h.Length)
|
||||
|> Array.sum
|
||||
x, y, d)
|
||||
|
||||
let gradient (grid: (float * float * float) [,]) =
|
||||
let n1 = Array2D.length1 grid
|
||||
let n2 = Array2D.length2 grid
|
||||
grid
|
||||
|> Array2D.mapi (fun i j _ ->
|
||||
let g =
|
||||
if i = n1 - 1 && j > 0 && j < n2 - 1 then
|
||||
[| grid[i - 1, j]; grid[i, j]; grid[i, j - 1]; grid[i, j + 1] |]
|
||||
elif i > 0 && i < n1 - 1 && j = n2 - 1 then
|
||||
[| grid[i - 1, j]; grid[i + 1, j]; grid[i, j]; grid[i, j - 1] |]
|
||||
elif i = 0 && j = 0 then
|
||||
[| grid[i, j]; grid[i + 1, j]; grid[i, j]; grid[i, j + 1] |]
|
||||
elif i = n1 - 1 && j = n2 - 1 then
|
||||
[| grid[i - 1, j]; grid[i, j]; grid[i, j - 1]; grid[i, j] |]
|
||||
else
|
||||
[| grid[i - 1, j]; grid[i + 1, j]; grid[i, j - 1]; grid[i, j + 1] |]
|
||||
let xx, yy, h = Array.unzip3 g
|
||||
let grx = (h[1] - h[0]) / (xx[1] - xx[0])
|
||||
let gry = (h[3] - h[2]) / (yy[3] - yy[2])
|
||||
let x, y, _ = grid[i, j]
|
||||
(x, y, sqrt (grx ** 2 + gry ** 2)))
|
||||
Reference in New Issue
Block a user