@jjlmoya/utils-motor 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/package.json +2 -2
  2. package/src/category/index.ts +3 -1
  3. package/src/entries.ts +5 -1
  4. package/src/index.ts +10 -0
  5. package/src/tests/locale_completeness.test.ts +1 -1
  6. package/src/tests/tool_validation.test.ts +1 -1
  7. package/src/tool/evChargingTimeCostPlanner/bibliography.astro +6 -0
  8. package/src/tool/evChargingTimeCostPlanner/bibliography.ts +16 -0
  9. package/src/tool/evChargingTimeCostPlanner/component.astro +147 -0
  10. package/src/tool/evChargingTimeCostPlanner/controller.ts +214 -0
  11. package/src/tool/evChargingTimeCostPlanner/dom-views.ts +124 -0
  12. package/src/tool/evChargingTimeCostPlanner/entry.ts +30 -0
  13. package/src/tool/evChargingTimeCostPlanner/ev-charging-time-cost-planner.css +598 -0
  14. package/src/tool/evChargingTimeCostPlanner/evaluator.ts +10 -0
  15. package/src/tool/evChargingTimeCostPlanner/i18n/de.ts +22 -0
  16. package/src/tool/evChargingTimeCostPlanner/i18n/en.ts +161 -0
  17. package/src/tool/evChargingTimeCostPlanner/i18n/es.ts +16 -0
  18. package/src/tool/evChargingTimeCostPlanner/i18n/factory.ts +113 -0
  19. package/src/tool/evChargingTimeCostPlanner/i18n/fr.ts +9 -0
  20. package/src/tool/evChargingTimeCostPlanner/i18n/id.ts +9 -0
  21. package/src/tool/evChargingTimeCostPlanner/i18n/it.ts +9 -0
  22. package/src/tool/evChargingTimeCostPlanner/i18n/ja.ts +13 -0
  23. package/src/tool/evChargingTimeCostPlanner/i18n/ko.ts +13 -0
  24. package/src/tool/evChargingTimeCostPlanner/i18n/nl.ts +9 -0
  25. package/src/tool/evChargingTimeCostPlanner/i18n/pl.ts +9 -0
  26. package/src/tool/evChargingTimeCostPlanner/i18n/pt.ts +9 -0
  27. package/src/tool/evChargingTimeCostPlanner/i18n/ru.ts +13 -0
  28. package/src/tool/evChargingTimeCostPlanner/i18n/sv.ts +9 -0
  29. package/src/tool/evChargingTimeCostPlanner/i18n/tr.ts +9 -0
  30. package/src/tool/evChargingTimeCostPlanner/i18n/zh.ts +13 -0
  31. package/src/tool/evChargingTimeCostPlanner/index.ts +10 -0
  32. package/src/tool/evChargingTimeCostPlanner/logic.test.ts +71 -0
  33. package/src/tool/evChargingTimeCostPlanner/logic.ts +174 -0
  34. package/src/tool/evChargingTimeCostPlanner/seo.astro +15 -0
  35. package/src/tool/evChargingTimeCostPlanner/storage.ts +27 -0
  36. package/src/tool/evChargingTimeCostPlanner/ui.ts +50 -0
  37. package/src/tool/motorcycleSkidMarkSpeedEstimator/bibliography.astro +6 -0
  38. package/src/tool/motorcycleSkidMarkSpeedEstimator/bibliography.ts +12 -0
  39. package/src/tool/motorcycleSkidMarkSpeedEstimator/component.astro +166 -0
  40. package/src/tool/motorcycleSkidMarkSpeedEstimator/controller.ts +207 -0
  41. package/src/tool/motorcycleSkidMarkSpeedEstimator/dom-views.ts +101 -0
  42. package/src/tool/motorcycleSkidMarkSpeedEstimator/entry.ts +30 -0
  43. package/src/tool/motorcycleSkidMarkSpeedEstimator/evaluator.ts +7 -0
  44. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/de.ts +185 -0
  45. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/en.ts +185 -0
  46. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/es.ts +185 -0
  47. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/fr.ts +185 -0
  48. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/id.ts +185 -0
  49. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/it.ts +185 -0
  50. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/ja.ts +201 -0
  51. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/ko.ts +201 -0
  52. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/nl.ts +185 -0
  53. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/pl.ts +185 -0
  54. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/pt.ts +185 -0
  55. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/ru.ts +185 -0
  56. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/sv.ts +185 -0
  57. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/tr.ts +185 -0
  58. package/src/tool/motorcycleSkidMarkSpeedEstimator/i18n/zh.ts +201 -0
  59. package/src/tool/motorcycleSkidMarkSpeedEstimator/index.ts +10 -0
  60. package/src/tool/motorcycleSkidMarkSpeedEstimator/logic.test.ts +229 -0
  61. package/src/tool/motorcycleSkidMarkSpeedEstimator/logic.ts +179 -0
  62. package/src/tool/motorcycleSkidMarkSpeedEstimator/motorcycle-skid-mark-speed-estimator.css +523 -0
  63. package/src/tool/motorcycleSkidMarkSpeedEstimator/seo.astro +15 -0
  64. package/src/tool/motorcycleSkidMarkSpeedEstimator/storage.ts +49 -0
  65. package/src/tool/motorcycleSkidMarkSpeedEstimator/ui.ts +46 -0
  66. package/src/tools.ts +5 -1
@@ -0,0 +1,185 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '@jjlmoya/utils-shared';
3
+ import { bibliographyEntries } from '../bibliography';
4
+ import type { MotorcycleSkidMarkSpeedEstimatorLocaleContent } from '../entry';
5
+
6
+ const slug = 'kalkulator-kecepatan-bekas-rem-motor';
7
+ const title = 'Kalkulator Kecepatan Bekas Rem Motor';
8
+ const description =
9
+ 'Estimasi rentang kecepatan sepeda motor dari panjang bekas rem, gesekan permukaan, dan kemiringan jalan. Alat simulasi edukasi fisika dan analisis kecelakaan.';
10
+
11
+ const faq = [
12
+ {
13
+ question: 'Apa yang ditunjukkan oleh bekas rem ?',
14
+ answer:
15
+ 'Bekas rem roda terkunci mencatat jarak yang dibutuhkan untuk menghentikan energi kinetik setelah rotasi ban berhenti. Persamaan fisika memberikan kecepatan minimum pada awal tanda yang terlihat, bukan kecepatan jelajah sebelum pengendara pertama kali menyentuh rem.',
16
+ },
17
+ {
18
+ question: 'Mengapa hasilnya berupa rentang kecepatan ?',
19
+ answer:
20
+ 'Gesekan permukaan memiliki ketidakpastian, pengereman sepeda motor terbagi antara roda depan dan belakang, dan kemiringan jalan mengubah hambatan efektif. Estimator memvariasikannya untuk memberikan nilai rendah, sedang, dan tinggi.',
21
+ },
22
+ {
23
+ question: 'Apakah bisa digunakan untuk laporan kecelakaan resmi ?',
24
+ answer:
25
+ 'Tidak. Rekonstruksi resmi membutuhkan pengukuran dinamometer di lokasi kejadian, analisis ABS, bekas seretan, dan penyidik terlatih. Alat ini dirancang sebagai laboratorium fisika untuk pembelajaran.',
26
+ },
27
+ {
28
+ question: 'Apa bedanya dengan kalkulator jarak pengereman ?',
29
+ answer:
30
+ 'Kalkulator jarak pengereman mulai dari kecepatan dan menghitung jarak tempuh. Alat ini mulai dari bekas rem karet yang diukur dan menghitung mundur ke rentang kecepatan tanpa memperhitungkan waktu reaksi.',
31
+ },
32
+ ];
33
+
34
+ const howTo = [
35
+ { name: 'Ukur bekas rem', text: 'Catat panjang bekas rem roda yang terkunci secara terlihat dalam satuan meter atau kaki.' },
36
+ { name: 'Pilih permukaan', text: 'Pilih jenis jalan yang sesuai dengan lokasi kejadian atau sesuaikan nilai gesekan jika memiliki pengukuran lokal.' },
37
+ { name: 'Atur kemiringan dan rem', text: 'Masukkan kemiringan jalan dan tentukan apakah bekas rem berasal dari kedua rem, rem depan, atau rem belakang.' },
38
+ { name: 'Baca estimasi', text: 'Gunakan kecepatan sedang sebagai estimasi kerja dan rentang rendah hingga tinggi sebagai efek asumsi.' },
39
+ ];
40
+
41
+ const seo: SEOSection[] = [
42
+ { type: 'title', level: 2, text: 'Menghitung rentang kecepatan dari bekas rem' },
43
+ {
44
+ type: 'paragraph',
45
+ html: 'Sepeda motor sering meninggalkan satu bekas rem belakang yang jelas, bekas rem depan yang lebih samar, atau cetakan ABS yang terputus-putus. Ukur bagian roda yang terkunci sepenuhnya, bukan seretan bodi sepeda motor setelah terjatuh di jalan raya.',
46
+ },
47
+ { type: 'title', level: 3, text: 'Model perhitungan fisika dan rumus' },
48
+ {
49
+ type: 'paragraph',
50
+ html: 'Model kerja didasarkan pada keseimbangan energi gesekan: kecepatan adalah akar kuadrat dari dua kali gravitasi dikali faktor gesekan dikali panjang bekas rem. Kemiringan jalan berfungsi sebagai komponen vektor. Jalan menanjak membantu penghentian, sedangkan jalan menurun mengurangi hambatan efektif.',
51
+ },
52
+ {
53
+ type: 'list',
54
+ items: [
55
+ 'Panjang dikonversi ke meter secara internal untuk menjaga kesetaraan fisik.',
56
+ 'Pilihan permukaan menyediakan koefisien gesekan ban terkunci standar.',
57
+ 'Penggunaan rem depan dan belakang menerapkan efisiensi pengereman sesuai standar distribusi beban.',
58
+ 'Penggunaan rem yang tidak diketahui memperluas rentang dari asumsi rem belakang ke kedua rem.',
59
+ ],
60
+ },
61
+ {
62
+ type: 'tip',
63
+ title: 'Ukur hanya ban yang terkunci',
64
+ html: 'Mulailah pengukuran pada bayangan atau garis pertama ban terkunci dan berhentilah di tempat rotasi berlanjut atau benturan terjadi. Jangan tambahkan jarak terseretnya rangka motor.',
65
+ },
66
+ { type: 'title', level: 3, text: 'Koefisien gesekan standar permukaan jalan' },
67
+ {
68
+ type: 'table',
69
+ headers: ['Permukaan', 'Gesekan Rata-rata', 'Rentang Gesekan'],
70
+ rows: [
71
+ ['Aspal kering', '0.70', '0.55 hingga 0.85'],
72
+ ['Aspal basah', '0.50', '0.35 hingga 0.65'],
73
+ ['Beton kering', '0.75', '0.60 hingga 0.90'],
74
+ ['Kerikil', '0.50', '0.35 hingga 0.70'],
75
+ ['Tanah atau rumput', '0.40', '0.25 hingga 0.55'],
76
+ ['Es', '0.10', '0.05 hingga 0.18'],
77
+ ],
78
+ },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Ini adalah nilai referensi pembelajaran untuk karet yang terseret terkunci di jalan. Uji gesekan langsung di tempat kejadian selalu lebih akurat daripada tabel standar.',
82
+ },
83
+ { type: 'title', level: 3, text: 'Pengaruh distribusi pengereman sepeda motor' },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Sebagian besar sepeda motor memiliki kontrol depan dan belakang yang terpisah. Bekas rem belakang tunggal tidak berarti pengendara menggunakan seluruh cengkeraman yang tersedia. Oleh karena itu, alat ini memungkinkan Anda memilih kedua rem, depan, belakang, atau tidak diketahui.',
87
+ },
88
+ {
89
+ type: 'diagnostic',
90
+ variant: 'warning',
91
+ title: 'Model edukasi dan simulasi',
92
+ badge: 'Edukasi',
93
+ html: 'Sistem ABS, keausan ban, beban, dan benturan di ujung bekas rem semuanya mengubah kecepatan sebenarnya. Jika faktor gesekan jalan menurun mencapai nol, kalkulator akan menolak memberikan angka.',
94
+ },
95
+ ];
96
+
97
+ const schemas: WithContext<SoftwareApplication | FAQPage | HowTo>[] = [
98
+ {
99
+ '@context': 'https://schema.org',
100
+ '@type': 'SoftwareApplication',
101
+ name: title,
102
+ applicationCategory: 'UtilitiesApplication',
103
+ operatingSystem: 'Web',
104
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
105
+ description,
106
+ },
107
+ {
108
+ '@context': 'https://schema.org',
109
+ '@type': 'FAQPage',
110
+ mainEntity: faq.map((item) => ({
111
+ '@type': 'Question',
112
+ name: item.question,
113
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
114
+ })),
115
+ },
116
+ {
117
+ '@context': 'https://schema.org',
118
+ '@type': 'HowTo',
119
+ name: title,
120
+ step: howTo.map((step) => ({
121
+ '@type': 'HowToStep',
122
+ name: step.name,
123
+ text: step.text,
124
+ })),
125
+ },
126
+ ];
127
+
128
+ export const content: MotorcycleSkidMarkSpeedEstimatorLocaleContent = {
129
+ slug,
130
+ title,
131
+ description,
132
+ ui: {
133
+ unitMetric: 'Metrik',
134
+ unitImperial: 'Imperial',
135
+ disclaimer: 'Hanya untuk tujuan edukasi.',
136
+ lengthLabel: 'Panjang bekas rem',
137
+ lengthHint: 'Tarik bekas rem untuk mengubah panjang.',
138
+ gradeLabel: 'Kemiringan',
139
+ gradeHint: 'Jalan menanjak membantu pengereman.',
140
+ surfaceLabel: 'Permukaan jalan',
141
+ frictionLabel: 'Koefisien gesekan',
142
+ frictionHint: 'Pilih jalan atau masukkan nilai.',
143
+ brakeLabel: 'Rem terkunci',
144
+ brakeBoth: 'Keduanya',
145
+ brakeFront: 'Depan',
146
+ brakeRear: 'Belakang',
147
+ brakeUnknown: 'Tidak diketahui',
148
+ speedLabel: 'Estimasi kecepatan pada bekas rem',
149
+ rangeLabel: 'Rentang kecepatan',
150
+ dragHint: 'Tarik pada jalan.',
151
+ emptyMessage: 'Atur bekas rem untuk menghitung kecepatan.',
152
+ invalidMessage: 'Turunan terlalu curam. Penghentian tidak memungkinkan.',
153
+ readyMessage: 'Kecepatan dihitung.',
154
+ educationalBadge: 'Edukasi',
155
+ surfaceDryAsphalt: 'Aspal kering',
156
+ surfaceWetAsphalt: 'Aspal basah',
157
+ surfaceDryConcrete: 'Beton kering',
158
+ surfaceGravel: 'Kerikil',
159
+ surfaceGrass: 'Tanah',
160
+ surfaceIce: 'Es',
161
+ surfaceCustom: 'Manual',
162
+ sensitivityLabel: 'Rentang ketidakpastian',
163
+ lowAssumption: 'Rendah',
164
+ highAssumption: 'Tinggi',
165
+ gradeUphill: 'Menanjak',
166
+ gradeDownhill: 'Menurun',
167
+ gradeLevel: 'Datar',
168
+ measureHint: 'Pengukuran di lokasi lebih akurat dari tabel.',
169
+ stencilUnitKmh: 'km/jam',
170
+ stencilUnitMph: 'mph',
171
+ lengthUnitM: 'm',
172
+ lengthUnitFt: 'ft',
173
+ percentSuffix: '%',
174
+ dragLowLabel: 'Rendah',
175
+ dragMidLabel: 'Sedang',
176
+ dragHighLabel: 'Tinggi',
177
+ },
178
+ seo,
179
+ faqTitle: 'Pertanyaan umum tentang bekas rem',
180
+ faq,
181
+ bibliographyTitle: 'Sumber',
182
+ bibliography: bibliographyEntries,
183
+ howTo,
184
+ schemas,
185
+ };
@@ -0,0 +1,185 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '@jjlmoya/utils-shared';
3
+ import { bibliographyEntries } from '../bibliography';
4
+ import type { MotorcycleSkidMarkSpeedEstimatorLocaleContent } from '../entry';
5
+
6
+ const slug = 'calcolatore-velocita-traccia-frenata-moto';
7
+ const title = 'Calcolatore velocità da traccia di frenata moto';
8
+ const description =
9
+ 'Stima l intervallo di velocità di una moto dalla lunghezza della traccia di frenata, attrito del terreno e pendenza stradale. Strumento per simulazione e fisica.';
10
+
11
+ const faq = [
12
+ {
13
+ question: 'Cosa rappresenta la traccia di frenata ?',
14
+ answer:
15
+ 'Una traccia di pneumatico bloccato indica la distanza utilizzata per dissipare l energia cinetica dopo l arresto della rotazione. La formula calcola la velocità minima iniziale all inizio della traccia visibile sul manto stradale.',
16
+ },
17
+ {
18
+ question: 'Perché il risultato viene espresso come intervallo ?',
19
+ answer:
20
+ 'L attrito del terreno e la ripartizione della frenata tra ruota anteriore e posteriore presentano incertezze. Lo strumento offre valori minimi, medi e massimi per mostrare la stima più probabile in base alle ipotesi.',
21
+ },
22
+ {
23
+ question: 'È valido per perizie o ricostruzioni ufficiali di sinistri ?',
24
+ answer:
25
+ 'No. Una ricostruzione professionale richiede rilievi dinamometrici sul posto, analisi dell intervento dell ABS ed esame dei danni al veicolo. Questo strumento è un laboratorio di fisica a scopo didattico.',
26
+ },
27
+ {
28
+ question: 'Come differisce dal calcolatore di spazio di arresto ?',
29
+ answer:
30
+ 'Il calcolatore di spazio di arresto parte dalla velocità per determinare la distanza. Questo strumento esegue il calcolo inverso partendo dalla traccia gommata senza includere il tempo di reazione del conducente.',
31
+ },
32
+ ];
33
+
34
+ const howTo = [
35
+ { name: 'Misurare la traccia', text: 'Rileva la lunghezza della traccia di pneumatico bloccato in metri o piedi sulla carreggiata.' },
36
+ { name: 'Selezionare il fondo', text: 'Scegli la superficie stradale o imposta manualmente il coefficiente di attrito dinamico.' },
37
+ { name: 'Impostare pendenza e freni', text: 'Inserisci l inclinazione della strada e specifica i freni azionati dal motociclista.' },
38
+ { name: 'Leggere la stima', text: 'Osserva il valore di velocità media e l intervallo di incertezza stimato in base alle opzioni.' },
39
+ ];
40
+
41
+ const seo: SEOSection[] = [
42
+ { type: 'title', level: 2, text: 'Dalla traccia di frenata all intervallo di velocità' },
43
+ {
44
+ type: 'paragraph',
45
+ html: 'La traccia lasciata dalla ruota bloccata consente di risalire alla velocità minima al momento dell inizio della frenata. È fondamentale misurare solo il tratto a ruota completamente bloccata senza considerare lo strisciamento della carenatura dopo una caduta.',
46
+ },
47
+ { type: 'title', level: 3, text: 'Modello fisico di calcolo e formule' },
48
+ {
49
+ type: 'paragraph',
50
+ html: 'Il calcolo applica il principio di conservazione dell energia cinetica durante lo scivolamento gomma-strada. La velocità è proporzionale alla radice quadrata del prodotto di gravità, lunghezza della traccia e decelerazione con l inclinazione della strada. La salita aiuta l arresto mentre la discesa riduce l attrito utile.',
51
+ },
52
+ {
53
+ type: 'list',
54
+ items: [
55
+ 'Conversione metrica automatica per garantire la massima coerenza fisica del valore.',
56
+ 'Coefficienti di attrito predefiniti per asfalto asciutto, bagnato, cemento, ghiaia e ghiaccio.',
57
+ 'Valutazione della ripartizione di carico tra freno anteriore e posteriore secondo le norme di omologazione.',
58
+ 'Ampiezza di stima maggiorata quando il comando del freno utilizzato rimane sconosciuto.',
59
+ ],
60
+ },
61
+ {
62
+ type: 'tip',
63
+ title: 'Misurare solo la ruota bloccata',
64
+ html: 'Inizia la misurazione dal primo segno di gomma visibile sull asfalto ed escludi la strisciata della carenatura avvenuta dopo la caduta della moto sulla carreggiata.',
65
+ },
66
+ { type: 'title', level: 3, text: 'Coefficienti di attrito indicativi per tipo di superficie' },
67
+ {
68
+ type: 'table',
69
+ headers: ['Superficie', 'Attrito medio', 'Intervallo di aderenza'],
70
+ rows: [
71
+ ['Asfalto asciutto', '0.70', '0.55 a 0.85'],
72
+ ['Asfalto bagnato', '0.50', '0.35 a 0.65'],
73
+ ['Cemento asciutto', '0.75', '0.60 a 0.90'],
74
+ ['Ghiaia', '0.50', '0.35 a 0.70'],
75
+ ['Terra o erba', '0.40', '0.25 a 0.55'],
76
+ ['Ghiaccio', '0.10', '0.05 a 0.18'],
77
+ ],
78
+ },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Questi sono valori di riferimento per gomma bloccata in scivolamento sul manto stradale. Una misurazione dinamometrica eseguita sul posto offre sempre la massima accuratezza.',
82
+ },
83
+ { type: 'title', level: 3, text: 'Influenza dei freni della moto e trasferimento di carico' },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'I comandi separati tra le ruote rendono fondamentale valutare quale asse è stato bloccato dal conducente per considerare il trasferimento di carico e l aderenza disponibile.',
87
+ },
88
+ {
89
+ type: 'diagnostic',
90
+ variant: 'warning',
91
+ title: 'Uso didattico e informativo',
92
+ badge: 'Didattico',
93
+ html: 'L intervento dell ABS, l usura del battistrada o eventuali urti modificano la velocità reale. In caso di pendenza eccessiva in discesa, la pagina blocca il calcolo per impossibilità fisica.',
94
+ },
95
+ ];
96
+
97
+ const schemas: WithContext<SoftwareApplication | FAQPage | HowTo>[] = [
98
+ {
99
+ '@context': 'https://schema.org',
100
+ '@type': 'SoftwareApplication',
101
+ name: title,
102
+ applicationCategory: 'UtilitiesApplication',
103
+ operatingSystem: 'Web',
104
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
105
+ description,
106
+ },
107
+ {
108
+ '@context': 'https://schema.org',
109
+ '@type': 'FAQPage',
110
+ mainEntity: faq.map((item) => ({
111
+ '@type': 'Question',
112
+ name: item.question,
113
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
114
+ })),
115
+ },
116
+ {
117
+ '@context': 'https://schema.org',
118
+ '@type': 'HowTo',
119
+ name: title,
120
+ step: howTo.map((step) => ({
121
+ '@type': 'HowToStep',
122
+ name: step.name,
123
+ text: step.text,
124
+ })),
125
+ },
126
+ ];
127
+
128
+ export const content: MotorcycleSkidMarkSpeedEstimatorLocaleContent = {
129
+ slug,
130
+ title,
131
+ description,
132
+ ui: {
133
+ unitMetric: 'Metrico',
134
+ unitImperial: 'Imperiale',
135
+ disclaimer: 'Solo per scopi didattici e laboratorio di fisica.',
136
+ lengthLabel: 'Lunghezza traccia',
137
+ lengthHint: 'Trascina la traccia per modificare la lunghezza.',
138
+ gradeLabel: 'Pendenza',
139
+ gradeHint: 'La salita aiuta a frenare, la discesa riduce l attrito.',
140
+ surfaceLabel: 'Fondo stradale',
141
+ frictionLabel: 'Attrito',
142
+ frictionHint: 'Scegli la superficie o imposta il coefficiente.',
143
+ brakeLabel: 'Freno bloccato',
144
+ brakeBoth: 'Entrambi',
145
+ brakeFront: 'Anteriore',
146
+ brakeRear: 'Posteriore',
147
+ brakeUnknown: 'Sconosciuto',
148
+ speedLabel: 'Velocità stimata sulla traccia',
149
+ rangeLabel: 'Intervallo di stima',
150
+ dragHint: 'Trascina sulla strada per regolare.',
151
+ emptyMessage: 'Regola la traccia per calcolare la velocità.',
152
+ invalidMessage: 'Pendenza troppo elevata. Arresto impossibile.',
153
+ readyMessage: 'Velocità calcolata.',
154
+ educationalBadge: 'Didattico',
155
+ surfaceDryAsphalt: 'Asfalto asciutto',
156
+ surfaceWetAsphalt: 'Asfalto bagnato',
157
+ surfaceDryConcrete: 'Cemento asciutto',
158
+ surfaceGravel: 'Ghiaia',
159
+ surfaceGrass: 'Terra',
160
+ surfaceIce: 'Ghiaccio',
161
+ surfaceCustom: 'Manuale',
162
+ sensitivityLabel: 'Margine di incertezza',
163
+ lowAssumption: 'Basso',
164
+ highAssumption: 'Alto',
165
+ gradeUphill: 'Salita',
166
+ gradeDownhill: 'Discesa',
167
+ gradeLevel: 'Piana',
168
+ measureHint: 'Una misurazione reale sul posto è più precisa.',
169
+ stencilUnitKmh: 'km/h',
170
+ stencilUnitMph: 'mph',
171
+ lengthUnitM: 'm',
172
+ lengthUnitFt: 'ft',
173
+ percentSuffix: '%',
174
+ dragLowLabel: 'Basso',
175
+ dragMidLabel: 'Medio',
176
+ dragHighLabel: 'Alto',
177
+ },
178
+ seo,
179
+ faqTitle: 'Domande frequenti sulle tracce di frenata',
180
+ faq,
181
+ bibliographyTitle: 'Fonti',
182
+ bibliography: bibliographyEntries,
183
+ howTo,
184
+ schemas,
185
+ };
@@ -0,0 +1,201 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import type { SEOSection } from '@jjlmoya/utils-shared';
3
+ import { bibliographyEntries } from '../bibliography';
4
+ import type { MotorcycleSkidMarkSpeedEstimatorLocaleContent } from '../entry';
5
+
6
+ const slug = 'motorcycle-skid-mark-speed-estimator';
7
+ const title = 'バイクブレーキ痕速度推定計算ツール';
8
+ const description =
9
+ 'スキッドマーク(タイヤのブレーキ痕)の長さ、路面摩擦係数、道路の傾斜および使用されたブレーキ系統から、バイクの制動開始時の推定速度範囲を計算する教育・物理シミュレーションツールです。';
10
+
11
+ const faq = [
12
+ {
13
+ question: 'ブレーキ痕は何を表していますか?',
14
+ answer:
15
+ 'ロックしたタイヤのブレーキ痕は、運動エネルギーを摩擦熱として消費するために必要な距離を示します。物理モデルのエネルギー方程式により、車輪が完全にロックした時点での最低初期速度を逆算できます。',
16
+ },
17
+ {
18
+ question: 'なぜ速度が範囲で表示されるのですか?',
19
+ answer:
20
+ '路面摩擦係数や前後ブレーキの配分には現場による変動や不確実性が含まれるためです。本ツールでは、想定される下限値・中央値・上限値を算出することで、推定の感度と幅を可視化します。',
21
+ },
22
+ {
23
+ question: '事故鑑定の公式レポートに使用できますか?',
24
+ answer:
25
+ 'いいえ。公式な事故解析や保険鑑定には、現地での精密な減速測定、タイヤマークの鑑定、ABS解析および専門家による調査が必要です。本ツールは物理現象を学ぶ教育シミュレーターです。',
26
+ },
27
+ {
28
+ question: '制動距離計算ツールとの違いは何ですか?',
29
+ answer:
30
+ '制動距離計算ツールは既知の速度から停車までの距離を計算しますが、本ツールは現場で測定されたブレーキ痕の長さから速度を逆算します。空走距離や空走時間は含まれません。',
31
+ },
32
+ ];
33
+
34
+ const howTo = [
35
+ { name: '痕跡を測定', text: 'タイヤが完全にロックして路面に残した可視痕跡の長さをメートルまたはフィートで精密に記録します。' },
36
+ { name: '路面を選択', text: '該当するアスファルトやコンクリートなどの路面条件を選択するか、実測摩擦係数を直接入力します。' },
37
+ { name: '勾配とブレーキを設定', text: '道路の傾斜度および前後どのブレーキがロックしたかを選択します。' },
38
+ { name: '推定値を確認', text: '中央値を基準の推定速度とし、上下限の幅を考慮して結果を検討します。' },
39
+ ];
40
+
41
+ const seo: SEOSection[] = [
42
+ {
43
+ type: 'title',
44
+ level: 2,
45
+ text: 'ブレーキ痕から速度範囲を科学的に算出',
46
+ },
47
+ {
48
+ type: 'paragraph',
49
+ html: '二輪車(バイク)の急ブレーキ時には、後輪の鮮明な痕跡や前輪の薄い痕跡、ABS作動による断続的なマークが残ります。滑走測定では、転倒後に車体が路面を滑った距離を除き、タイヤが完全にロックして滑走した部分のみを正確に測定することが不可欠です。',
50
+ },
51
+ {
52
+ type: 'title',
53
+ level: 3,
54
+ text: '物理計算モデルと減速エネルギー方程式',
55
+ },
56
+ {
57
+ type: 'paragraph',
58
+ html: '本ツールの計算モデルは、滑り摩擦による運動エネルギーの保存法則に基づいています。推定速度は、重力加速度、路面ドラッグ係数、および滑走距離の積の2倍の平方根として求められます。道路の勾配ベクトルも考慮され、上り坂は制動を支援し、下り坂は制動効果を低下させます。',
59
+ },
60
+ {
61
+ type: 'list',
62
+ items: [
63
+ '測定された長さはメートル単位に自動変換され、一貫した物理計算が行われます。',
64
+ '乾燥・湿潤アスファルト、コンクリート、砂利、土、氷盤の標準摩擦係数をプリセット。',
65
+ '前後ブレーキの独立操作や荷重移動に伴う制動効率の変化に対応。',
66
+ 'ブレーキ系統が不明な場合は、後輪のみと前後両輪の仮定に基づく広い推定幅を提示。',
67
+ ],
68
+ },
69
+ {
70
+ type: 'tip',
71
+ title: 'ロック痕のみを正確に測定',
72
+ html: 'タイヤゴムが路面に付着し始めた最初のシャドー部から、回転が再開するか衝突に至る地点までを測定します。転倒後のカウル滑走距離は別の摩擦現象となるため除外してください。',
73
+ },
74
+ {
75
+ type: 'title',
76
+ level: 3,
77
+ text: '各路面における標準的な摩擦係数一覧',
78
+ },
79
+ {
80
+ type: 'table',
81
+ headers: ['路面状況', '平均摩擦係数', '想定される変動範囲'],
82
+ rows: [
83
+ ['乾燥アスファルト', '0.70', '0.55 ~ 0.85'],
84
+ ['湿潤アスファルト', '0.50', '0.35 ~ 0.65'],
85
+ ['乾燥コンクリート', '0.75', '0.60 ~ 0.90'],
86
+ ['砂利道・砂利', '0.50', '0.35 ~ 0.70'],
87
+ ['土・草地', '0.40', '0.25 ~ 0.55'],
88
+ ['氷盤・凍結路', '0.10', '0.05 ~ 0.18'],
89
+ ],
90
+ },
91
+ {
92
+ type: 'paragraph',
93
+ html: '上記の数値はロックされたタイヤがスリップする際の代表的な参考値です。実際の現場調査においては、引きずり試験機による現地実測データが最も高い精度を提供します。',
94
+ },
95
+ {
96
+ type: 'title',
97
+ level: 3,
98
+ text: 'バイク独特の前後独立ブレーキと荷重移動',
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: '四輪車と異なり、バイクは前後のブレーキが独立して操作されます。後輪だけのブレーキ痕は、車両全体の制動性能がフルに発揮されなかったことを意味します。本ツールでは制動輪の指定により、より正確な速度帯の検証が可能です。',
103
+ },
104
+ {
105
+ type: 'diagnostic',
106
+ variant: 'warning',
107
+ title: '物理シミュレーションに関する注意事項',
108
+ badge: '教育用シミュレーター',
109
+ html: 'ABSの作動間隔、タイヤの摩耗状態、積載重量、空気圧および末端での衝突エネルギーにより実際の速度は大きく変化します。急激な下り坂で減速が不可能な条件では、物理的限界として計算を中断します。',
110
+ },
111
+ ];
112
+
113
+ const schemas: WithContext<SoftwareApplication | FAQPage | HowTo>[] = [
114
+ {
115
+ '@context': 'https://schema.org',
116
+ '@type': 'SoftwareApplication',
117
+ name: title,
118
+ applicationCategory: 'UtilitiesApplication',
119
+ operatingSystem: 'Web',
120
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'JPY' },
121
+ description,
122
+ },
123
+ {
124
+ '@context': 'https://schema.org',
125
+ '@type': 'FAQPage',
126
+ mainEntity: faq.map((item) => ({
127
+ '@type': 'Question',
128
+ name: item.question,
129
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
130
+ })),
131
+ },
132
+ {
133
+ '@context': 'https://schema.org',
134
+ '@type': 'HowTo',
135
+ name: title,
136
+ step: howTo.map((step) => ({
137
+ '@type': 'HowToStep',
138
+ name: step.name,
139
+ text: step.text,
140
+ })),
141
+ },
142
+ ];
143
+
144
+ export const content: MotorcycleSkidMarkSpeedEstimatorLocaleContent = {
145
+ slug,
146
+ title,
147
+ description,
148
+ ui: {
149
+ unitMetric: 'メートル法',
150
+ unitImperial: 'ヤード・ポンド法',
151
+ disclaimer: '教育目的のシミュレーションです。',
152
+ lengthLabel: 'ブレーキ痕の長さ',
153
+ lengthHint: 'ドラッグして痕跡の長さを変更します。',
154
+ gradeLabel: '道路勾配',
155
+ gradeHint: '上り坂は減速を助けます。',
156
+ surfaceLabel: '路面タイプ',
157
+ frictionLabel: '摩擦係数',
158
+ frictionHint: '路面を選択するか数値を入力します。',
159
+ brakeLabel: 'ロックしたブレーキ',
160
+ brakeBoth: '前後両方',
161
+ brakeFront: '前輪のみ',
162
+ brakeRear: '後輪のみ',
163
+ brakeUnknown: '不明',
164
+ speedLabel: '痕跡に基づく推定速度',
165
+ rangeLabel: '推定速度範囲',
166
+ dragHint: '道路上をドラッグしてください。',
167
+ emptyMessage: '痕跡を設定して速度を計算します。',
168
+ invalidMessage: '急坂のため物理的に停車不可能です。',
169
+ readyMessage: '速度の計算が完了しました。',
170
+ educationalBadge: '教育用',
171
+ surfaceDryAsphalt: '乾燥アスファルト',
172
+ surfaceWetAsphalt: '湿潤アスファルト',
173
+ surfaceDryConcrete: '乾燥コンクリート',
174
+ surfaceGravel: '砂利',
175
+ surfaceGrass: '土・芝生',
176
+ surfaceIce: '氷',
177
+ surfaceCustom: 'カスタム',
178
+ sensitivityLabel: '不確実性範囲',
179
+ lowAssumption: '下限',
180
+ highAssumption: '上限',
181
+ gradeUphill: '上り坂',
182
+ gradeDownhill: '下り坂',
183
+ gradeLevel: '平坦',
184
+ measureHint: '現地での実測値はテーブル値より正確です。',
185
+ stencilUnitKmh: 'km/h',
186
+ stencilUnitMph: 'mph',
187
+ lengthUnitM: 'm',
188
+ lengthUnitFt: 'ft',
189
+ percentSuffix: '%',
190
+ dragLowLabel: '低摩擦',
191
+ dragMidLabel: '中摩擦',
192
+ dragHighLabel: '高摩擦',
193
+ },
194
+ seo,
195
+ faqTitle: 'ブレーキ痕に関するよくある質問',
196
+ faq,
197
+ bibliographyTitle: '参考文献',
198
+ bibliography: bibliographyEntries,
199
+ howTo,
200
+ schemas,
201
+ };