@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,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: '오토바이는 전륜과 후륜 브레이크가 독립적으로 작동합니다. 후륜에만 남은 타이어 자국은 차량의 전체 제동 성능이 100% 활용되지 않았음을 의미합니다. 본 도구는 제동 바퀴 지정을 통해 더욱 정밀한 속도 범위를 검증할 수 있습니다.',
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: 'KRW' },
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
+ };
@@ -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 = 'motor-remspoor-snelheid-berekenen';
7
+ const title = 'Motor Remspoor Snelheid Berekenen';
8
+ const description =
9
+ 'Schat de snelheid van een motorfiets op basis van remspoorlengte, wrijving en hellingshoek. Educatieve natuurkundige simulatie voor ongevalsanalyse.';
10
+
11
+ const faq = [
12
+ {
13
+ question: 'Wat geeft een remspoor aan ?',
14
+ answer:
15
+ 'Een remspoor van een geblokkeerd wiel toont de afstand die nodig is om kinetische energie af te bouwen via wrijvingswarmte. De natuurkundige energievergelijking bepaalt de minimale snelheid aan het begin van het zichtbare spoor.',
16
+ },
17
+ {
18
+ question: 'Waarom is het resultaat een bereik ?',
19
+ answer:
20
+ 'Wrijvingscoëfficiënten van het wegdek en de verdeling van de remkracht tussen voor- en achterwiel bevatten onzekerheden. De calculator geeft daarom een lage, gemiddelde en hoge waarde om de gevoeligheid te tonen.',
21
+ },
22
+ {
23
+ question: 'Is dit geschikt voor een officieel unvalrapport ?',
24
+ answer:
25
+ 'Nee. Officiële ongevallenanalyse vereist dynamometrische metingen ter plaatse, ABS-analyse en onderzoek door experts. Dit hulpmiddel is een educatief natuurkunde-laboratorium.',
26
+ },
27
+ {
28
+ question: 'Wat is het verschil met een remwegberekenaar ?',
29
+ answer:
30
+ 'Een remwegberekenaar begint bij de snelheid om de afstand te berekenen. Dit hulpmiddel rekent terug vanaf het gemeten rubberen spoor naar een snelheidsbereik zonder reactietijd op te nemen.',
31
+ },
32
+ ];
33
+
34
+ const howTo = [
35
+ { name: 'Meet het spoor', text: 'Meet de lengte van het zichtbare remspoor van het geblokkeerde wiel nauwkeurig in meters of voet.' },
36
+ { name: 'Kies het wegdek', text: 'Selecteer de ondergrond die overeenkomt met de situatie of voer handmatig een gemeten wrijvingscoëfficiënt in.' },
37
+ { name: 'Stel helling en remmen in', text: 'Voer de hellingshoek van de weg in en geef aan welke remmen zijn gebruikt.' },
38
+ { name: 'Lees de schatting af', text: 'Gebruik de gemiddelde snelheid als uitgangspunt en bekijk de mogelijke afwijkingen.' },
39
+ ];
40
+
41
+ const seo: SEOSection[] = [
42
+ { type: 'title', level: 2, text: 'Van remspoor naar snelheidsbereik' },
43
+ {
44
+ type: 'paragraph',
45
+ html: 'Een motorfiets laat bij krachtig remmen vaak een duidelijk spoor achter van het achterwiel, een lichter spoor van het voorwiel of een onderbroken afdruk bij ABS. Meet alleen het gedeelte met een volledig geblokkeerd wiel, zonder de schuifschade van de motor op de zijkant na een val mee te rekenen.',
46
+ },
47
+ { type: 'title', level: 3, text: 'Natuurkundig rekenmodel en energieformule' },
48
+ {
49
+ type: 'paragraph',
50
+ html: 'Het rekenmodel gebruikt de energiebalans van de schuifwrijving: de snelheid is evenredig met de kwadraatwortel van twee keer de zwaartekracht vermenigvuldigd met de wrijvingsfactor en de spoorlengte. De helling van de weg werkt als een vectoriele component. Een helling omhoog helpt bij het remmen, terwijl een helling omlaag de effectieve wrijving vermindert.',
51
+ },
52
+ {
53
+ type: 'list',
54
+ items: [
55
+ 'Automatische omrekening van lengtematen naar meters voor exacte natuurkundige vergelijkingen.',
56
+ 'Standaardwaarden voor droog en nat asfalt, beton, grind, aarde en ijs.',
57
+ 'Rekening gehouden met de remkrachtverdeling tussen voor- en achterwiel.',
58
+ 'Bredere onzekerheidsmarge wanneer de exacte rembediening onbekend is ter plaatse.',
59
+ ],
60
+ },
61
+ {
62
+ type: 'tip',
63
+ title: 'Meet alleen het geblokkeerde spoor',
64
+ html: 'Begin de meting bij het eerste zichtbare rubber op het asfalt en stop waar het wiel weer begint te draaien of de botsing plaatsvindt. Reken de glijdafstand van het frame niet mee.',
65
+ },
66
+ { type: 'title', level: 3, text: 'Typische wrijvingscoëfficiënten voor wegdekken' },
67
+ {
68
+ type: 'table',
69
+ headers: ['Ondergrond', 'Gemiddelde wrijving', 'Wrijvingsbereik'],
70
+ rows: [
71
+ ['Droog asfalt', '0.70', '0.55 tot 0.85'],
72
+ ['Nat asfalt', '0.50', '0.35 tot 0.65'],
73
+ ['Droog beton', '0.75', '0.60 tot 0.90'],
74
+ ['Grind', '0.50', '0.35 tot 0.70'],
75
+ ['Aarde of gras', '0.40', '0.25 tot 0.55'],
76
+ ['IJs', '0.10', '0.05 tot 0.18'],
77
+ ],
78
+ },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Dit zijn referentiewaarden voor glijdend rubber op de weg. Een directe wrijvingsmeting ter plaatse levert altijd een hogere nauwkeurigheid op dan een standaardtabel.',
82
+ },
83
+ { type: 'title', level: 3, text: 'Invloed van motorremmen en gewichtsoverdracht' },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Omdat motorfietsen gescheiden bedieningen hebben voor voor- en achterrem, betekent een enkel achterwielspoor niet dat de rijder al het beschikbare remvermogen heeft benut. Met de tool kunt u verschillende remscenario in te stellen.',
87
+ },
88
+ {
89
+ type: 'diagnostic',
90
+ variant: 'warning',
91
+ title: 'Educatief natuurkundemodel',
92
+ badge: 'Educatief',
93
+ html: 'ABS-ingrepen, bandenslijtage, belading en impactenergie veranderen de werkelijke snelheid. Bij een te steile helling omlaag weigert het systeem de berekening uit te voeren wegens natuurkundige onmogelijkheid.',
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: 'Metrisch',
134
+ unitImperial: 'Imperiaal',
135
+ disclaimer: 'Uitsluitend voor educatieve doeleinden.',
136
+ lengthLabel: 'Spoorlengte',
137
+ lengthHint: 'Sleep het spoor om de lengte aan te passen.',
138
+ gradeLabel: 'Helling',
139
+ gradeHint: 'Bergop helpt bij het remmen, bergaf vermindert wrijving.',
140
+ surfaceLabel: 'Wegdek',
141
+ frictionLabel: 'Wrijvingscoëfficiënt',
142
+ frictionHint: 'Kies een wegdek of voer de waarde in.',
143
+ brakeLabel: 'Geblokkeerde rem',
144
+ brakeBoth: 'Beide',
145
+ brakeFront: 'Voor',
146
+ brakeRear: 'Achter',
147
+ brakeUnknown: 'Onbekend',
148
+ speedLabel: 'Geschatte snelheid op het spoor',
149
+ rangeLabel: 'Snelheidsbereik',
150
+ dragHint: 'Sleep over de weg.',
151
+ emptyMessage: 'Stel het spoor in om snelheid te berekenen.',
152
+ invalidMessage: 'Te steile helling. Stoppen onmogelijk.',
153
+ readyMessage: 'Snelheid berekend.',
154
+ educationalBadge: 'Educatief',
155
+ surfaceDryAsphalt: 'Droog asfalt',
156
+ surfaceWetAsphalt: 'Nat asfalt',
157
+ surfaceDryConcrete: 'Droog beton',
158
+ surfaceGravel: 'Grind',
159
+ surfaceGrass: 'Aarde',
160
+ surfaceIce: 'IJs',
161
+ surfaceCustom: 'Handmatig',
162
+ sensitivityLabel: 'Onzekerheidsmarge',
163
+ lowAssumption: 'Laag',
164
+ highAssumption: 'Hoog',
165
+ gradeUphill: 'Bergop',
166
+ gradeDownhill: 'Bergaf',
167
+ gradeLevel: 'Vlak',
168
+ measureHint: 'Meting ter plaatse is nauwkeuriger dan een tabel.',
169
+ stencilUnitKmh: 'km/h',
170
+ stencilUnitMph: 'mph',
171
+ lengthUnitM: 'm',
172
+ lengthUnitFt: 'ft',
173
+ percentSuffix: '%',
174
+ dragLowLabel: 'Laag',
175
+ dragMidLabel: 'Gemiddeld',
176
+ dragHighLabel: 'Hoog',
177
+ },
178
+ seo,
179
+ faqTitle: 'Veelgestelde vragen over remsporen',
180
+ faq,
181
+ bibliographyTitle: 'Bronvermelding',
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 = 'kalkulator-predkosci-sladu-hamowania-motocykla';
7
+ const title = 'Kalkulator prędkości ze śladu hamowania motocykla';
8
+ const description =
9
+ 'Oszacuj prędkość motocykla na podstawie długości śladu hamowania, tarcia nawierzchni i nachylenia drogi. Fizyczne narzędzie edukacyjne do rekonstrukcji zdarzeń.';
10
+
11
+ const faq = [
12
+ {
13
+ question: 'Co oznacza ślad hamowania ?',
14
+ answer:
15
+ 'Ślad zablokowanego koła określa dystans potrzebny do rozproszenia energii kinetycznej w postaci ciepła tarcia. Równanie fizyczne wyznacza minimalną prędkość początkową na samym początku widocznego śladu na jezdni.',
16
+ },
17
+ {
18
+ question: 'Dlaczego wynik jest podawany jako zakres ?',
19
+ answer:
20
+ 'Współczynnik tarcia oraz podział siły hamowania między przednie i tylne koło zawierają niepewności. Kalkulator podaje wartości dolną, średnią i górną, aby pokazać margines błędu przyjętych założeń.',
21
+ },
22
+ {
23
+ question: 'Czy wynik można wykorzystać w raporcie powypadkowym ?',
24
+ answer:
25
+ 'Nie. Oficjalna ekspertyza wymaga pomiarów dynamometrycznych na miejscu zdarzenia, analizy działania systemu ABS i oględzin biegłego. To narzędzie służy wyłącznie jako edukacyjne laboratorium fizyczne.',
26
+ },
27
+ {
28
+ question: 'Czym różni się od kalkulatora drogi hamowania ?',
29
+ answer:
30
+ 'Kalkulator drogi hamowania wychodzi od znanej prędkości i wylicza dystans zatrzymania. To narzędzie wykonuje obliczenie odwrotne ze zmierzonego śladu gumy bez uwzględniania czasu reakcji kierowcy.',
31
+ },
32
+ ];
33
+
34
+ const howTo = [
35
+ { name: 'Zmierz ślad', text: 'Zapisz długość widocznego śladu zablokowanego koła w metrach lub stopach z dokładnością do odcinka gumy.' },
36
+ { name: 'Wybierz nawierzchnię', text: 'Wybierz rodzaj drogi odpowiadający zdarzeniu lub wprowadź własny zmierzony współczynnik tarcia kinetycznego.' },
37
+ { name: 'Ustaw nachylenie i hamulce', text: 'Wprowadź spadek drogi oraz określ, które hamulce zostały zablokowane przez kierującego.' },
38
+ { name: 'Odczytaj wynik', text: 'Przeanalizuj prędkość średnią oraz zakres niepewności w zależności od przyjętych wariantów.' },
39
+ ];
40
+
41
+ const seo: SEOSection[] = [
42
+ { type: 'title', level: 2, text: 'Zamiana śladu hamowania na zakres prędkości' },
43
+ {
44
+ type: 'paragraph',
45
+ html: 'Motocykl podczas gwałtownego hamowania pozostawia wyraźny ślad tylnego koła, lżejszy ślad przedniego koła lub przerywany odcisk w przypadku obecności systemu ABS. Mierzyć należy wyłącznie odcinek z całkowicie zablokowanym kołem, wykluczając późniejsze szorowanie owiewek motocykla po przewróceniu się na jezdnię.',
46
+ },
47
+ { type: 'title', level: 3, text: 'Fizyczne podstawy obliczeń i wzór energii' },
48
+ {
49
+ type: 'paragraph',
50
+ html: 'Model opiera się na zasadzie zachowania energii kinetycznej podczas tarcia ślizgowego: prędkość jest wprost proporcjonalna do pierwiastka kwadratowego z podwojonego iloczynu przyspieszenia ziemskiego, współczynnika oporu i długości śladu. Nachylenie drogi działa jako komponent wektorowy. Wzniesienie wspomaga hamowanie, podczas gdy spadek zmniejsza efektywne tarcie.',
51
+ },
52
+ {
53
+ type: 'list',
54
+ items: [
55
+ 'Automatyczna konwersja jednostek długości na metry dla zachowania spójności fizycznej.',
56
+ 'Domyślne współczynniki tarcia dla suchego i mokrego asfaltu, betonu, żwiru oraz lodu.',
57
+ 'Uwzględnienie dynamicznego przeniesienia masy między przednią a tylną osią.',
58
+ 'Poszerzony zakres niepewności w przypadku nieznanego stanu użycia hamulców na miejscu zdarzenia.',
59
+ ],
60
+ },
61
+ {
62
+ type: 'tip',
63
+ title: 'Mierz tylko zablokowane koło',
64
+ html: 'Rozpocznij pomiar od pierwszego widocznego cienia gumy na asfalcie i zakończ w miejscu, gdzie koło odzyskuje rotację lub następuje uderzenie. Nie wliczaj śladów tarcia ramy po upadku.',
65
+ },
66
+ { type: 'title', level: 3, text: 'Typowe współczynniki tarcia nawierzchni drogowych' },
67
+ {
68
+ type: 'table',
69
+ headers: ['Nawierzchnia', 'Średnie tarcie', 'Zakres tarcia'],
70
+ rows: [
71
+ ['Suchy asfalt', '0.70', '0.55 do 0.85'],
72
+ ['Mokry asfalt', '0.50', '0.35 do 0.65'],
73
+ ['Suchy beton', '0.75', '0.60 do 0.90'],
74
+ ['Żwir', '0.50', '0.35 do 0.70'],
75
+ ['Ziemia lub trawa', '0.40', '0.25 do 0.55'],
76
+ ['Lód', '0.10', '0.05 do 0.18'],
77
+ ],
78
+ },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Są to wartości referencyjne dla zablokowanych opon ślizgających się po jezdni. Pomiary dynamometryczne wykonane bezpośrednio na miejscu zdarzenia zawsze zapewniają wyższą dokładność.',
82
+ },
83
+ { type: 'title', level: 3, text: 'Wpływ rozkładu hamulców motocyklowych' },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Ponieważ motocykle posiadają niezależne sterowanie przednim i tylnym hamulcem, sam ślad tylnego koła nie oznacza wykorzystania pełnej przyczepności. Narzędzie umożliwia osobną analizę każdego wariantu.',
87
+ },
88
+ {
89
+ type: 'diagnostic',
90
+ variant: 'warning',
91
+ title: 'Model edukacyjny i naukowy',
92
+ badge: 'Edukacja',
93
+ html: 'Działanie systemu ABS, zużycie bieżnika opony oraz uderzenia zmieniają rzeczywistą prędkość. W przypadku zbyt dużego spadku terenu strona blokuje obliczenia z powodu fizycznej niemożliwości zatrzymania.',
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: 'PLN' },
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: 'Metryczne',
134
+ unitImperial: 'Calowe',
135
+ disclaimer: 'Tylko do celów edukacyjnych.',
136
+ lengthLabel: 'Długość śladu',
137
+ lengthHint: 'Przeciągnij ślad, aby zmienić długość.',
138
+ gradeLabel: 'Nachylenie',
139
+ gradeHint: 'Jazda pod górę ułatwia hamowanie, spadek zmniejsza tarcie.',
140
+ surfaceLabel: 'Nawierzchnia',
141
+ frictionLabel: 'Współczynnik tarcia',
142
+ frictionHint: 'Wybierz nawierzchnię lub wpisz wartość.',
143
+ brakeLabel: 'Zablokowany hamulec',
144
+ brakeBoth: 'Oba',
145
+ brakeFront: 'Przedni',
146
+ brakeRear: 'Tylny',
147
+ brakeUnknown: 'Nieznany',
148
+ speedLabel: 'Szacowana prędkość ze śladu',
149
+ rangeLabel: 'Zakres prędkości',
150
+ dragHint: 'Przeciągnij na drodze.',
151
+ emptyMessage: 'Ustaw ślad, aby obliczyć prędkość.',
152
+ invalidMessage: 'Zbyt duże nachylenie. Zatrzymanie niemożliwe.',
153
+ readyMessage: 'Prędkość obliczona.',
154
+ educationalBadge: 'Edukacyjny',
155
+ surfaceDryAsphalt: 'Suchy asfalt',
156
+ surfaceWetAsphalt: 'Mokry asfalt',
157
+ surfaceDryConcrete: 'Suchy beton',
158
+ surfaceGravel: 'Żwir',
159
+ surfaceGrass: 'Ziemia',
160
+ surfaceIce: 'Lód',
161
+ surfaceCustom: 'Ręczny',
162
+ sensitivityLabel: 'Zakres błędu',
163
+ lowAssumption: 'Niski',
164
+ highAssumption: 'Wysoki',
165
+ gradeUphill: 'Pod górę',
166
+ gradeDownhill: 'Z góry',
167
+ gradeLevel: 'Płasko',
168
+ measureHint: 'Pomiar na miejscu jest dokładniejszy niż tabela.',
169
+ stencilUnitKmh: 'km/h',
170
+ stencilUnitMph: 'mph',
171
+ lengthUnitM: 'm',
172
+ lengthUnitFt: 'ft',
173
+ percentSuffix: '%',
174
+ dragLowLabel: 'Niskie',
175
+ dragMidLabel: 'Średnie',
176
+ dragHighLabel: 'Wysokie',
177
+ },
178
+ seo,
179
+ faqTitle: 'Często zadawane pytania o ślady hamowania',
180
+ faq,
181
+ bibliographyTitle: 'Źródła',
182
+ bibliography: bibliographyEntries,
183
+ howTo,
184
+ schemas,
185
+ };