TIF_E41201209/Siketas_map_FIX/app/Helpers/helpers.php

334 lines
14 KiB
PHP

<?php
// --------------- Fungsi Keanggotaan Waktu Kejadian -------------
use App\Models\Kerawanan;
if (!function_exists('keanggotaanWaktuKejadian')) {
function keanggotaanWaktuKejadian($waktu_kejadian)
{
$waktu_kejadianA = $waktu_kejadianB = $waktu_kejadianC = $waktu_kejadianD = 0;
if ($waktu_kejadian <= 5) {
if ($waktu_kejadian <= 0) {
$waktu_kejadianA = 1;
} elseif ($waktu_kejadian >= 0 && $waktu_kejadian <= 5) {
$waktu_kejadianA = (5 - $waktu_kejadian) / (5 - 0);
} elseif ($waktu_kejadian >= 5) {
$waktu_kejadianA = 0;
}
$waktu_kejadianRule = 'Dini Hari';
}
if ($waktu_kejadian >= 5 && $waktu_kejadian < 11) {
if ($waktu_kejadian >= 5 && $waktu_kejadian <= 8) {
$waktu_kejadianB = ($waktu_kejadian - 5) / (8 - 5);
} elseif ($waktu_kejadian >= 8 && $waktu_kejadian <= 11) {
$waktu_kejadianB = (11 - $waktu_kejadian) / (11 - 8);
} elseif ($waktu_kejadian == 8) {
$waktu_kejadianB = 1;
} elseif ($waktu_kejadian <= 5 && $waktu_kejadian >= 11) {
$waktu_kejadianB = 0;
}
$waktu_kejadianRule = 'Pagi';
}
if ($waktu_kejadian >= 11 && $waktu_kejadian < 17) {
if ($waktu_kejadian >= 11 && $waktu_kejadian <= 14) {
$waktu_kejadianC = ($waktu_kejadian - 11) / (14 - 11);
} elseif ($waktu_kejadian >= 14 && $waktu_kejadian <= 17) {
$waktu_kejadianC = (17 - $waktu_kejadian) / (17 - 14);
} elseif ($waktu_kejadian == 14) {
$waktu_kejadianC = 1;
} elseif ($waktu_kejadian <= 11 && $waktu_kejadian >= 17) {
$waktu_kejadianC = 0;
}
$waktu_kejadianRule = 'Siang-Sore';
}
if ($waktu_kejadian >= 17) {
if ($waktu_kejadian >= 17 && $waktu_kejadian <= 23.59) {
$waktu_kejadianD = ($waktu_kejadian - 17) / (23.59 - 17);
} elseif ($waktu_kejadian >= 23.59) {
$waktu_kejadianD = 1;
} elseif ($waktu_kejadian <= 17) {
$waktu_kejadianD = 0;
}
$waktu_kejadianRule = 'Malam';
}
return [
'waktu_kejadianA' => $waktu_kejadianA,
'waktu_kejadianB' => $waktu_kejadianB,
'waktu_kejadianC' => $waktu_kejadianC,
'waktu_kejadianD' => $waktu_kejadianD,
'waktu_kejadianRule' => $waktu_kejadianRule
];
}
}
//-------------- Fungsi Keanggotaan Kondisi Kecelakaan ------------------//
if (!function_exists('keanggotaanKondisiKecelakaan')) {
function keanggotaanKondisiKecelakaan($kondisi_kecelakaan)
{
$kondisi_kecelakaanA = $kondisi_kecelakaanB = $kondisi_kecelakaanC = 0;
if ($kondisi_kecelakaan <= 1) {
if ($kondisi_kecelakaan <= 1) {
$kondisi_kecelakaanA = 1;
} elseif ($kondisi_kecelakaan > 1 && $kondisi_kecelakaan < 2) {
$kondisi_kecelakaanA = (2 - $kondisi_kecelakaan) / (2 - 1);
} elseif ($kondisi_kecelakaan >= 2) {
$kondisi_kecelakaanA = 0;
}
$kondisi_kecelakaanRule = 'Ringan';
}
if ($kondisi_kecelakaan > 1 && $kondisi_kecelakaan <= 2) {
if ($kondisi_kecelakaan > 1 && $kondisi_kecelakaan < 2) {
$kondisi_kecelakaanB = ($kondisi_kecelakaan - 1) / (2 - 1);
} elseif ($kondisi_kecelakaan > 2 && $kondisi_kecelakaan < 3) {
$kondisi_kecelakaanB = (3 - $kondisi_kecelakaan) / (3 - 2);
} elseif ($kondisi_kecelakaan == 2) {
$kondisi_kecelakaanB = 1;
} elseif ($kondisi_kecelakaan <= 1 || $kondisi_kecelakaan >= 3) {
$kondisi_kecelakaanB = 0;
}
$kondisi_kecelakaanRule = 'Sedang';
}
if ($kondisi_kecelakaan > 2) {
if ($kondisi_kecelakaan >= 2 && $kondisi_kecelakaan < 3) {
$kondisi_kecelakaanC = ($kondisi_kecelakaan - 2) / (3 - 2);
} elseif ($kondisi_kecelakaan >= 3) {
$kondisi_kecelakaanC = 1;
} elseif ($kondisi_kecelakaan <= 2) {
$kondisi_kecelakaanC = 0;
}
$kondisi_kecelakaanRule = 'Berat';
}
return [
'kondisi_kecelakaanA' => $kondisi_kecelakaanA,
'kondisi_kecelakaanB' => $kondisi_kecelakaanB,
'kondisi_kecelakaanC' => $kondisi_kecelakaanC,
'kondisi_kecelakaanRule' => $kondisi_kecelakaanRule
];
}
}
// ------------- Fungsi Keanggotaan Kondisi Cahaya -------------- //
if (!function_exists('keanggotaanKondisiCahaya')) {
function keanggotaanKondisiCahaya($kondisi_cahaya)
{
$kondisi_cahayaA = $kondisi_cahayaB = 0;
if ($kondisi_cahaya <= 1) {
if ($kondisi_cahaya <= 1) {
$kondisi_cahayaA = 1;
} elseif ($kondisi_cahaya > 1 && $kondisi_cahaya < 2) {
$kondisi_cahayaA = (2 - $kondisi_cahaya) / (2 - 1);
} elseif ($kondisi_cahaya >= 2) {
$kondisi_cahayaA = 0;
}
$kondisi_cahayaRule = 'Terang / Jelas';
}
if ($kondisi_cahaya > 1 && $kondisi_cahaya <= 2) {
if ($kondisi_cahaya > 1 && $kondisi_cahaya < 2) {
$kondisi_cahayaB = ($kondisi_cahaya - 1) / (2 - 1);
} elseif ($kondisi_cahaya >= 2) {
$kondisi_cahayaB = 1;
} elseif ($kondisi_cahaya <= 1) {
$kondisi_cahayaB = 0;
}
$kondisi_cahayaRule = 'Redup / Samar';
}
return [
'kondisi_cahayaA' => $kondisi_cahayaA,
'kondisi_cahayaB' => $kondisi_cahayaB,
'kondisi_cahayaRule' => $kondisi_cahayaRule
];
}
}
// -------------- Fungsi Keanggotaan Bentuk Geometri --------------
if (!function_exists('keanggotaanBentukGeometri')) {
function keanggotaanBentukGeometri($bentuk_geometri)
{
$bentuk_geometriA = $bentuk_geometriB = $bentuk_geometriC = $bentuk_geometriD = $bentuk_geometriE = 0;
if ($bentuk_geometri <= 1) {
if ($bentuk_geometri <= 1) {
$bentuk_geometriA = 1;
} elseif ($bentuk_geometri > 1 && $bentuk_geometri < 2) {
$bentuk_geometriA = (2 - $bentuk_geometri) / (2 - 1);
} elseif ($bentuk_geometri >= 2) {
$bentuk_geometriA = 0;
}
$bentuk_geometriRule = 'Lurus';
}
if ($bentuk_geometri > 1 && $bentuk_geometri <= 2) {
if ($bentuk_geometri > 1 && $bentuk_geometri < 2) {
$bentuk_geometriB = ($bentuk_geometri - 1) / (2 - 1);
} elseif ($bentuk_geometri > 2 && $bentuk_geometri < 3) {
$bentuk_geometriB = (3 - $bentuk_geometri) / (3 - 2);
} elseif ($bentuk_geometri == 2) {
$bentuk_geometriB = 1;
} elseif ($bentuk_geometri <= 1 || $bentuk_geometri >= 3) {
$bentuk_geometriB = 0;
}
$bentuk_geometriRule = 'Jembatan';
}
if ($bentuk_geometri > 2 && $bentuk_geometri <= 3) {
if ($bentuk_geometri > 2 && $bentuk_geometri < 3) {
$bentuk_geometriC = ($bentuk_geometri - 2) / (3 - 2);
} elseif ($bentuk_geometri > 3 && $bentuk_geometri < 4) {
$bentuk_geometriC = (4 - $bentuk_geometri) / (4 - 3);
} elseif ($bentuk_geometri == 3) {
$bentuk_geometriC = 1;
} elseif ($bentuk_geometri <= 2 || $bentuk_geometri >= 4) {
$bentuk_geometriC = 0;
}
$bentuk_geometriRule = 'Tikungan';
}
if ($bentuk_geometri > 3 && $bentuk_geometri <= 4) {
if ($bentuk_geometri > 3 && $bentuk_geometri < 4) {
$bentuk_geometriD = ($bentuk_geometri - 3) / (4 - 3);
} elseif ($bentuk_geometri > 4 && $bentuk_geometri < 5) {
$bentuk_geometriD = (5 - $bentuk_geometri) / (5 - 4);
} elseif ($bentuk_geometri == 4) {
$bentuk_geometriD = 1;
} elseif ($bentuk_geometri <= 3 || $bentuk_geometri >= 5) {
$bentuk_geometriD = 0;
}
$bentuk_geometriRule = 'Simpang Tiga';
}
if ($bentuk_geometri > 4) {
if ($bentuk_geometri >= 4 && $bentuk_geometri < 5) {
$bentuk_geometriE = ($bentuk_geometri - 4) / (5 - 4);
} elseif ($bentuk_geometri >= 5) {
$bentuk_geometriE = 1;
} elseif ($bentuk_geometri <= 4) {
$bentuk_geometriE = 0;
}
$bentuk_geometriRule = 'Simpang Empat';
}
return [
'bentuk_geometriA' => $bentuk_geometriA,
'bentuk_geometriB' => $bentuk_geometriB,
'bentuk_geometriC' => $bentuk_geometriC,
'bentuk_geometriD' => $bentuk_geometriD,
'bentuk_geometriE' => $bentuk_geometriE,
'bentuk_geometriRule' => $bentuk_geometriRule
];
}
}
// Defuzzifikasi
if (!function_exists('hitungLuasMoment')) {
function hitungLuasMoment($tingkat_kerawanan, $minRule)
{
if ($tingkat_kerawanan == 'Aman') {
// Keanggotaaan berdasarkan fungsi keanggotaan
// $keanggotaan = 20;
// $keanggotaanAkhir = 30;
$kerawanan = Kerawanan::where('himpunan', 'Aman')->first();
if ($kerawanan) {
$keanggotaan = $kerawanan->keanggotaan_awal;
$keanggotaanAkhir = $kerawanan->keanggotaan_akhir;
}
// Batas bawah dan batas atas dari fungsi keanggotaan
$batasBawah = 0;
$batasAtas = $keanggotaanAkhir - $minRule * ($keanggotaanAkhir - $keanggotaan);
// Menghitung luas
$luasA1 = $batasAtas * $minRule;
$luasA2 = (($keanggotaanAkhir - $batasAtas) * $minRule) / 2;
$totalLuas = $luasA1 + $luasA2;
// Menghitung moment
$momentSatu = ($minRule / 2) * pow($batasAtas, 2) - ($minRule / 2) * pow($batasBawah, 2);
$momentDua = (3 / 2) * pow($keanggotaanAkhir, 2) - (0.1 / 3) * pow($keanggotaanAkhir, 3) - ((3 / 2) * pow($batasAtas, 2) - (0.1 / 3) * pow($batasAtas, 3));
$totalMoment = $momentSatu + $momentDua;
} elseif ($tingkat_kerawanan == 'Rawan') {
// Keanggotaaan berdasarkan fungsi keanggotaan
// $keanggotaan = 30;
// $keanggotaanTengah = 50;
// $keanggotaanAkhir = 70;
$kerawanan = Kerawanan::where('himpunan', 'Rawan')->first();
if ($kerawanan) {
$keanggotaan = $kerawanan->keanggotaan_awal;
$keanggotaanTengah = $kerawanan->keanggotaan_tengah;
$keanggotaanAkhir = $kerawanan->keanggotaan_akhir;
}
// Batas bawah dan batas atas dari fungsi keanggotaan
$batasBawah = $minRule * ($keanggotaanTengah - $keanggotaan) + $keanggotaan;
$batasAtas = $keanggotaanAkhir - $minRule * ($keanggotaanAkhir - $keanggotaanTengah);
// Menghitung luas
$luasA1 = (($batasBawah - $keanggotaan) * $minRule) / 2;
$luasA2 = ($batasAtas - $batasBawah) * $minRule;
$luasA3 = (($keanggotaanAkhir - $batasAtas) * $minRule) / 2;
$totalLuas = $luasA1 + $luasA2 + $luasA3;
// Menghitung moment
$momentSatu = (0.05 / 3) * pow($batasBawah, 3) - (1.5 / 2) * pow($batasBawah, 2) - ((0.05 / 3) * pow($keanggotaan, 3) - (1.5 / 2) * pow($keanggotaan, 2));
$momentDua = ($minRule / 2) * pow($batasAtas, 2) - ($minRule / 2) * pow($batasBawah, 2);
$momentTiga = (3.5 / 2) * pow($keanggotaanAkhir, 2) - (0.05 / 3) * pow($keanggotaanAkhir, 3) - ((3.5 / 2) * pow($batasAtas, 2) - (0.05 / 3) * pow($batasAtas, 3));
$totalMoment = $momentSatu + $momentDua + $momentTiga;
} elseif ($tingkat_kerawanan == 'Sangat Rawan') {
// Keanggotaaan berdasarkan fungsi keanggotaan
// $keanggotaan = 70;
// $keanggotaanAkhir = 90;
$kerawanan = Kerawanan::where('himpunan', 'Sangat Rawan')->first();
if ($kerawanan) {
$keanggotaan = $kerawanan->keanggotaan_awal;
$keanggotaanAkhir = $kerawanan->keanggotaan_akhir;
}
// Batas bawah dan batas atas dari fungsi keanggotaan
$batasBawah = $minRule * ($keanggotaanAkhir - $keanggotaan) + $keanggotaan;
$batasAtas = $kerawanan->keanggotaan_akhir;
// Menghitung luas
$luasA1 = (($batasBawah - $keanggotaan) * $minRule) / 2;
$luasA2 = ($batasAtas - $batasBawah) * $minRule;
$totalLuas = $luasA1 + $luasA2;
// Menghitung moment
$momentSatu = (0.05 / 3) * pow($batasBawah, 3) - (3.5 / 2) * pow($batasBawah, 2) - ((0.05 / 3) * pow($keanggotaan, 3) - (3.5 / 2) * pow($keanggotaan, 2));
$momentDua = ($minRule / 2) * pow($batasAtas, 2) - ($minRule / 2) * pow($batasBawah, 2);
$totalMoment = $momentSatu + $momentDua;
}
return [
'keanggotaan' => $keanggotaan ?? 0,
'keanggotaanTengah' => $keanggotaanTengah ?? 0,
'keanggotaanAkhir' => $keanggotaanAkhir ?? 0,
'batasBawah' => $batasBawah ?? 0,
'batasAtas' => $batasAtas ?? 0,
'luasA1' => $luasA1 ?? 0,
'luasA2' => $luasA2 ?? 0,
'luasA3' => $luasA3 ?? 0,
'momentSatu' => $momentSatu ?? 0,
'momentDua' => $momentDua ?? 0,
'momentTiga' => $momentTiga ?? 0,
'totalLuas' => $totalLuas ?? 0,
'totalMoment' => $totalMoment ?? 0,
];
}
}