Skip to content

get_Angle

James Brundage edited this page Oct 23, 2026 · 1 revision

get_Angle

Gets Wave Angle

Gets a Wave as a series of angles (in degrees).

Each sample in the wave travels one distance along the X axis, and up or down along the along the Y axis.

The angle we are moving up or down captures the shape of the waveform.

Notes

Thinking of waves this way provides some benefits.

This will write progress as it calculates and cache the vectors in memory after they are calculated.

View Source
<#
.SYNOPSIS
    Gets Wave Angle
.DESCRIPTION
    Gets a Wave as a series of angles (in degrees).

    Each sample in the wave travels one distance along the X axis, 
    and up or down along the along the Y axis.

    The angle we are moving up or down captures the shape of the waveform.
.NOTES
    Thinking of waves this way provides some benefits.
    
    This will write progress as it calculates and 
    cache the vectors in memory after they are calculated.
#>
param()

if ($this.'#Angle') { return $this.'#Angle' }

[double[]]$Samples = $this.Samples

$lastSample = 0

$progress = [Ordered]@{
    Id = Get-Random    
    Activity = "Vectoring"    
}

$sampleRate = $this.SampleRate
$SampleCount = $samples.Length
$degree = (180/[Math]::PI)

[double[]]$Angle = @(
    for ($index = 0; $index -lt $SampleCount;$index++) {

        if (-not ($index % 64kb)) {
            $progress.Status = "$index / $($SampleCount)"
            $progress.PercentComplete = ($index * 100 / $SampleCount)
            $progress.SecondsRemaining = (($SampleCount - $index) * (1 / $SampleRate))
            Write-Progress @progress
        }

        
        $degree/[Math]::Atan2(1,$samples[$index] - $lastSample)
        
        
        $lastSample = $samples[$index]
    }
)

$this | Add-Member NoteProperty '#Angle' $Angle -Force

$progress.Remove('PercentComplete')
$progress.Completed = $true
Write-Progress @progress

return $Angle

Clone this wiki locally