Categories
VB.NET

ПИНМ – версия 1.0.1

pinm-adjustment-result

Страница: Параметрично изравнение на нивелачни мрежи

Връзка: ПИНМ_v1.0.1

Описание:

Програмата служи за параметрично изравнение на нивелачни мрежи по МНМК.

Примерно съдържание на входен файл с дадени репери:

нр2000 470

Примерно съдържание на входен файл с измервания (нивелачни ходове):

нр2000 нр500 0 37 0
нр500 нр600 5 30 0
нр500 нр700 0 54 0
нр500 нр800 5.0001 82 0
нр600 нр700 -5 30 0
нр600 нр800 0.0000 54 0
нр700 нр800 5 31 0
нр800 нр450 -5.0003 693 0
нр450 нр250 0 35 0
нр450 нр350 5 30 0
нр450 нр150 4.999 70 0
нр250 нр350 4.9999 34 0
нр250 нр150 5 51 0
нр350 нр150 0.0001 42 0

Примерен резултат след изравнение на мрежата:

ПАРАМЕТРИЧНО ИЗРАВНЕНИЕ НА НИВЕЛАЧНА МРЕЖА

Неизвестни (Параметри) = [8]; Измервания (Уравнения) = [14]; Свръхизмервания = [6];
Дадени репери = [1];

ИЗЧИСЛЯВАНЕ НА ПРИБЛИЗИТЕЛНИТЕ ВИСОЧИНИ НА НОВИТЕ РЕПЕРИ

Приблизителна височина на нр500    = 470.000[m], изчислена от нр2000
Приблизителна височина на нр600    = 475.000[m], изчислена от нр500
Приблизителна височина на нр700    = 470.000[m], изчислена от нр500
Приблизителна височина на нр800    = 475.000[m], изчислена от нр500
Приблизителна височина на нр450    = 470.000[m], изчислена от нр800
Приблизителна височина на нр250    = 470.000[m], изчислена от нр450
Приблизителна височина на нр350    = 475.000[m], изчислена от нр450
Приблизителна височина на нр150    = 474.999[m], изчислена от нр450

РЕЗУЛТАТ ОТ ИЗРАВНЕНИЕТО

Нивелачен ход      Изм. прев.[m]     mh[mm] Изр. прев.[m]     mh[mm]      v[mm]     mv[mm]
нр2000  ->нр500           0.0000       0.25       0.00000       0.25       0.00       0.00 
нр500   ->нр600           5.0000       0.23       5.00001       0.18       0.01       0.14 
нр500   ->нр700           0.0000       0.31       0.00002       0.20       0.02       0.23 
нр500   ->нр800           5.0001       0.38       5.00003       0.22      -0.07       0.31 
нр600   ->нр700          -5.0000       0.23      -5.00000       0.17       0.00       0.15 
нр600   ->нр800           0.0000       0.31       0.00002       0.20       0.02       0.23 
нр700   ->нр800           5.0000       0.23       5.00001       0.18       0.01       0.14 
нр800   ->нр450          -5.0003       1.09      -5.00030       1.09       0.00       0.00 
нр450   ->нр250           0.0000       0.25      -0.00012       0.18      -0.12       0.17 
нр450   ->нр350           5.0000       0.23       4.99981       0.17      -0.19       0.15 
нр450   ->нр150           4.9990       0.35       4.99968       0.21       0.68       0.28 
нр250   ->нр350           4.9999       0.24       4.99993       0.18       0.03       0.17 
нр250   ->нр150           5.0000       0.30       4.99979       0.20      -0.21       0.22 
нр350   ->нр150           0.0001       0.27      -0.00013       0.19      -0.23       0.19 

ОЦЕНКА НА ТОЧНОСТТА

[PVV] = 0.943
СКГ за единица тежест Me = 0.40[mm]

ДАДЕНИ РЕПЕРИ

Репер    Височина[m]
нр2000   470.0000

НОВИ РЕПЕРИ

Репер    Височина[m] mH[mm]
нр500    470.00000   0.25
нр600    475.00001   0.31
нр700    470.00002   0.32
нр800    475.00003   0.33
нр450    469.99973   1.14
нр250    469.99962   1.16
нр350    474.99954   1.16
нр150    474.99941   1.16
Categories
VB.NET Упътвания

Вграждане на dll в assembly

Примерен код на VB.Net

1. Добавяне на Event Handler преди извикване на ресурс от dll файла

AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf AssemblyResolve

2. Функция за извикване на dll файла

Private Function AssemblyResolve(ByVal sender As Object, ByVal e As ResolveEventArgs) As Assembly
Dim resourceFullName As String = String.Format("Seo.{0}.dll", e.Name.Split(","
  c)(0))
Dim thisAssembly As Assembly = Assembly.GetExecutingAssembly()
Using resource As Stream = thisAssembly.GetManifestResourceStream(resourceFullName)
If resource IsNot Nothing Then
Return Assembly.Load(ToBytes(resource))
End If
Return Nothing
End Using
End Function

Private Function ToBytes(ByVal instance As Stream) As Byte()
Dim capacity As Integer = If(instance.CanSeek, Convert.ToInt32(instance.Length), 0)

Using result As New MemoryStream(capacity)
Dim readLength As Integer
Dim buffer(4096) As Byte

Do
readLength = instance.Read(buffer, 0, buffer.Length)
result.Write(buffer, 0, readLength)
Loop While readLength > 0

Return result.ToArray()
End Using
End Function
Categories
VB.NET

TIN Surface

Поддържани изходни формати във версия 0.7

  • скриптов файл за AutoCAD – експортира повърхнината като 3D линии
  • ESRI Shape файл – за ArcGIS, QGIS и други ГИС програми
  • XML файл – поддържа се LandXML, експортират се точките и триъгълниците

Формат на входния файл

Пълен формат:

[point id] [north] [east] [elevation] [point code]

11415 4572370.166 9462415.219 112.055 road

Само North, East, Elevation

[north] [east] [elevation]

4572369.179 9462409.152 112.190

С Point ID

[point id] [north] [east] [elevation]

11415 4572370.166 9462415.219 112.055

За разделител се използва интервал.

Връзка за сваляне:

[download id=“1074″]

Визуализация на създадена повърхнина с триъгълници и върхове:

tin surface triangles with vertices

Повече за програмата: TIN

Categories
VB.NET

Създаване на TIN с MapWinGIS

Примерен код на VB.NET за създаване на TIN* модел с MapWinGIS

* TIN – Triangular Irregular Network, Нерегулярна мрежа от триъгълници

Dim utils As New Utils()
Dim tin As New Tin()
tin.CreateTinFromPoints(points.ToArray())
Dim shapefile As New Shapefile()
shapefile = utils.TinToShapefile(tin, ShpfileType.SHP_POLYGON)
Categories
VB.NET

Нова версия на Гаусова проекция

Новата версия на програмата за преобразуване от географски координати (географска ширина и географска дължина) в проекционни Гаусови координати можете да свалите от следната връзка Гаусова проекция v1.2.1

За да работи програмата изисква версия 4.0 на Microsoft .Net Framework.

Categories
VB.NET

Обновяване на Vbox7 Downloader

Програмата Vbox7 Downloader, предназначена за сваляне на видео файлове от сайта Vbox7.com, е обновена до версия 0.6, като е добавена нова функционалност:

  • възможност за директно отваряне на файловете от списъка със свалени файлове;

Можете да свалите последната версия на Vbox7 Downloader от тази връзка Vbox7 Downloader

Програмата изисква да имате инсталиран .Net Framework 4, за да работи.

Categories
VB.NET Упътвания

Показване на точки в MapWinGIS

' дефиниране на нов точков shp файл
Dim pointShapeFile As New Shapefile
If pointShapeFile.CreateNewWithShapeID(String.Empty, ShpfileType.SHP_POINT) = True Then
    ' начален индекс на обектите в shp файла
    shapeIndex = 0
    ' за всеки връх (vertex) от списъка с върхове се създава нов точков обект в shp файла
    For Each vertex As Vertex In triangulation.VerticesList
        ' дефиниране на нов точков обект
        point = New Point
        ' координатите на точката съвпадат с координатите на върха
        With point
            .x = vertex.X
            .y = vertex.Y
        End With
        ' дефиниране на нов shp обект
        shape = New Shape
        With shape
            ' дефиниране на нов точков обект
            .Create(ShpfileType.SHP_POINT)
            ' вмъкване на точков обект
            .InsertPoint(point, 0)
        End With
        ' вмъкване на shp обекта в shp файла
        pointShapeFile.EditInsertShape(shape, shapeIndex)
        ' увеличаване на индекса с единица
        shapeIndex += 1
    Next vertex
    ' дефиниране на настройките за изобразяване на точковия shp файл
    With pointShapeFile.DefaultDrawingOptions
        ' тип на условния знак за точка
     .SetDefaultPointSymbol(tkDefaultPointSymbol.dpsCircle)
        ' запълващ цвят на условния знак
        .FillColor = color.ColorByName(tkMapColor.Blue)
        ' размер на точката
        .PointSize = 10
    End With
    ' добавяне и показване на точковия слой върху картата
    With Map
        .AddLayer(pointShapeFile, True)
        .ZoomToMaxExtents()
    End With
Else
    Throw New Exception("Не може да създаде нов shape файл с точки!")
End If
Categories
VB.NET

Задача: Sand-glass

Описание

Имало едно време един могъщ магьосник. Неговото име било Гуеногфрин. Не след дълго той станал велик магьосник. Добросърдечен бил той. Използвал магията си единствено, за да защитава хората от злите вещици, идващи през нощта. Гуеногфрин, въпреки това, бил миролюбив и не искал да се бие или нарани вещиците, затова той измислил друго решение. Щял да хваща вещиците и да ги заключва в пясъчни часовници (единственият затвор, от който  вещица не може да избяга). За нещастие, пясъчните му часовници били на привършване. Помогни на Гуеногфрин да залови всички вещици като направиш свои собствени пясъчни часовници.

Пример

Sand-glass

Решение

Module SandGlass
Sub Main()
Dim n = Integer.Parse(Console.ReadLine())
Dim stars As Integer = n + 2
Dim add As Boolean = False
For i As Integer = 1 To n
If stars = 1 Then
add = True
End If
stars = If(add = False, stars - 2, stars + 2)
Dim dots As Integer = (n - stars) * 0.5
Console.Write(New String(".", dots))
Console.Write(New String("*", stars))
Console.Write(New String(".", dots))
Console.WriteLine()
Next i
Console.ReadLine()
End Sub
End Module
Categories
VB.NET

Задача: Fir Tree

Описание

Бъдни вечер наближава, така че дори и програмистите трябва да се подготвят.

В духа на празника твоята задача е да напишеш програма, която отпечатва елха в конзолата.

Форматът на дървото е показан в примера по-долу.

Пример

Fir Tree

Решение

Module FirTree
Sub main()
Dim height As Integer = Integer.Parse(Console.ReadLine())
Dim width As Integer = 1
For i As Integer = 2 To height - 1
width += 2
Next i
Dim asterisk As Integer = -1
Dim point As Integer = 0
For i = 1 To height
asterisk += 2
point = If(i < height, (width - asterisk) * 0.5, (width - 1) * 0.5)
For j = 1 To width
If j <= point Or j > width - point Then
Console.Write(".")
Else
Console.Write("*")
End If
Next j
Console.WriteLine()
Next i
Console.ReadLine()
End Sub
End Module
Categories
VB.NET

Задача: Ship Damage

Описание

За дефинирането на диагонала не е от значение реда на въвеждане на двете срещуположни точки, както и самите точки.

Визуализация

Ship Damage

Решение

Imports System.Drawing
Module ShipDamage
Sub Main()
' вход на данни
Dim line(10) As Integer
For i As Integer = 0 To line.Length - 1
line(i) = Integer.Parse(Console.ReadLine())
Next i
' дефиниране на правоъгълник,
' с начало долен ляв ъгъл (1) и посока обратна на часовниковата стрелка,
' зададен чрез един от диагоналите му
Dim S(3) As Point 'масив за точките, дефиниращи върховете на правоъгълника
If line(2) - line(0) > 0 And line(3) - line(1) > 0 Then
'диагоналът е зададен с точки 1-3
S(0) = New Point(line(0), line(1))
S(1) = New Point(line(2), line(1))
S(2) = New Point(line(2), line(3))
S(3) = New Point(line(0), line(3))
ElseIf line(2) - line(0) > 0 And line(3) - line(1) < 0 Then 'диагоналът е зададен с точки 2-4 S(0) = New Point(line(2), line(1)) S(1) = New Point(line(0), line(1)) S(2) = New Point(line(0), line(3)) S(3) = New Point(line(2), line(3)) ElseIf line(2) - line(0) < 0 And line(3) - line(1) > 0 Then
'диагоналът е зададен с точки 4-2
S(0) = New Point(line(0), line(3))
S(1) = New Point(line(2), line(3))
S(2) = New Point(line(2), line(1))
S(3) = New Point(line(0), line(1))
Else
'диагоналът е зададен с точки 3-1
S(0) = New Point(line(2), line(3))
S(1) = New Point(line(0), line(3))
S(2) = New Point(line(0), line(1))
S(3) = New Point(line(2), line(1))
End If
'дефиниране на катапулти
Dim C(2) As Point 'масив за точките, дефиниращи катапултите
C(0) = New Point(line(5), line(6))
C(1) = New Point(line(7), line(8))
C(2) = New Point(line(9), line(10))
'дефиниране на хоризонта
Dim horizon As Integer = line(4)
'щети, нанесени по кораба от катапултите
Dim totalDmg As Integer = 0
'превъртане на всички катапулти
For i As Integer = 0 To C.Length - 1
'разстояние от катапулта до хоризонта
Dim dist = horizon - C(i).Y
'координати на точката, дефинираща мишената
Dim target = New Point(C(i).X, dist + horizon)
'брояч за положителните детерминанти
Dim positiveDeterminant As Integer = 0
'флаг за пропуск при отрицателна детерминанта
Dim miss As Boolean = False
'превъртане върховете на кораба
For j As Integer = 0 To S.Length - 1
'определяне на "площта" (детерминантата)
Dim area As Integer
If j < S.Length - 1 Then
area = (0.5) * (S(j + 1).X * target.Y - S(j + 1).Y * target.X - S(j).X * target.Y + S(j).Y * target.X + S(j).X * S(j + 1).Y - S(j).Y * S(j + 1).X)
Else
area = (0.5) * (S(0).X * target.Y - S(0).Y * target.X - S(j).X * target.Y + S(j).Y * target.X + S(j).X * S(0).Y - S(j).Y * S(0).X)
End If
'проверяване знака на "площта" (детерминантата)
Select Case area Case Is > 0 'положителна "площ"
'целта е улучена при 2 <= positiveDeterminant <= 4 positiveDeterminant += 1
Case Is < 0 'отрицателна "площ"
'целта е пропусната
miss = True
Exit For
End Select
Next j
'ако няма пропуск, прибавяме щетите, нанесени по кораба, към общите щети
If miss = False Then
Select Case positiveDeterminant
Case 4 'изстрелът попада в кораба
totalDmg += 100
Case 3 'изстрелът попада върху един от ръбовете
totalDmg += 50
Case 2 'изстрелът попада върху един от върховете
totalDmg += 25
End Select
End If
Next i
'извеждане на резултата
Console.WriteLine(String.Format(totalDmg))
End Sub
End Module