@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 = 'estimador-velocidade-marca-travagem-moto';
7
+ const title = 'Estimador de velocidade por marca de travagem de moto';
8
+ const description =
9
+ 'Estime o intervalo de velocidade de uma moto a partir da marca de travagem, fricção e inclinação da via. Ferramenta de simulacao educacional e fisica.';
10
+
11
+ const faq = [
12
+ {
13
+ question: 'O que representa uma marca de travagem ?',
14
+ answer:
15
+ 'Uma marca de pneu bloqueado indica a distancia necessaria para dissipar a energia cinetica apos a paragem da rotacao do pneu. A equacao fisica calcula a velocidade minima no inicio da marca visivel.',
16
+ },
17
+ {
18
+ question: 'Por que o resultado e um intervalo ?',
19
+ answer:
20
+ 'O coeficiente de atrito e a distribuicao de travagem entre a roda dianteira e traseira contem incertezas. O estimador fornece valores minimo, medio e maximo para demonstrar a margem de erro.',
21
+ },
22
+ {
23
+ question: 'Pode ser usado em relatorios policiais ou seguros ?',
24
+ answer:
25
+ 'Nao. Pericias oficiais exigem testes dinamometricos no local do acidente, analise de ABS e peritos qualificados. Esta ferramenta e exclusivamente um laboratorio de fisica educacional.',
26
+ },
27
+ {
28
+ question: 'Qual a diferenca para um calculador de distancia de travagem ?',
29
+ answer:
30
+ 'O calculador de distancia parte da velocidade conhecida para determinar a distancia percorrida. Esta ferramenta faz o calculo inverso a partir da marca de borracha sem incluir o tempo de reacao.',
31
+ },
32
+ ];
33
+
34
+ const howTo = [
35
+ { name: 'Medir a marca', text: 'Registe a extensao da marca visivel de roda bloqueada em metros ou pes de forma precisa.' },
36
+ { name: 'Selecionar o piso', text: 'Escolha o tipo de pavimento correspondente ao local ou ajuste manualmente o valor de atrito.' },
37
+ { name: 'Definir inclinacao e travoes', text: 'Insira a inclinacao da via e especifique se a marca provem de ambos os travoes ou apenas de um.' },
38
+ { name: 'Ler a estimativa', text: 'Analise o valor medio como estimativa principal e considere o intervalo de variacao resultante.' },
39
+ ];
40
+
41
+ const seo: SEOSection[] = [
42
+ { type: 'title', level: 2, text: 'Converter uma marca de pneu num intervalo de velocidade' },
43
+ {
44
+ type: 'paragraph',
45
+ html: 'Uma moto deixa frequentemente uma marca bem visivel do pneu traseiro, um rasto mais tenue do pneu dianteiro ou uma linha intermitente se o sistema ABS estiver ativo. Meça apenas a fracao de roda totalmente bloqueada na via, excluindo o deslize posterior da carenagem no asfalto apos a queda.',
46
+ },
47
+ { type: 'title', level: 3, text: 'Modelo fisico de calculo e equacao de energia' },
48
+ {
49
+ type: 'paragraph',
50
+ html: 'O modelo baseia-se na conservacao da energia cinetica durante o atrito de deslizamento: a velocidade e proporcional a raiz quadrada do dobro do produto da gravidade, do fator de arrasto e da extensao da marca. A inclinacao da estrada atua como componente vetorial. Uma subida ajuda a travar, enquanto uma descida reduz o atrito efetivo.',
51
+ },
52
+ {
53
+ type: 'list',
54
+ items: [
55
+ 'Conversao metrica automatica para garantir a precisao dos calculos fisicos.',
56
+ 'Valores padrao de atrito para asfalto seco, molhado, betao, gravilha e gelo.',
57
+ 'Consideracao da distribuicao de travagem entre a roda dianteira e traseira.',
58
+ 'Margem de incerteza alargada quando a utilizacao do travao e desconhecida no local.',
59
+ ],
60
+ },
61
+ {
62
+ type: 'tip',
63
+ title: 'Medir apenas o pneu bloqueado',
64
+ html: 'Inicie a medicao na primeira marca visivel de borracha depositada na estrada e termine no ponto em que a rotacao e retomada ou onde ocorre o impacto.',
65
+ },
66
+ { type: 'title', level: 3, text: 'Coeficientes de atrito de referencia por piso' },
67
+ {
68
+ type: 'table',
69
+ headers: ['Superficie', 'Atrito medio', 'Intervalo de aderencia'],
70
+ rows: [
71
+ ['Asfalto seco', '0.70', '0.55 a 0.85'],
72
+ ['Asfalto molhado', '0.50', '0.35 a 0.65'],
73
+ ['Betao seco', '0.75', '0.60 a 0.90'],
74
+ ['Gravilha', '0.50', '0.35 a 0.70'],
75
+ ['Terra ou relva', '0.40', '0.25 a 0.55'],
76
+ ['Gelo', '0.10', '0.05 a 0.18'],
77
+ ],
78
+ },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Valores de referencia para pneus bloqueados a deslizar na chausse. Um ensaio dinamometrico direto no local do acidente proporciona sempre maior precisao.',
82
+ },
83
+ { type: 'title', level: 3, text: 'Influencia dos travoes na moto e transferencia de carga' },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'A maioria das motos possui comandos independentes para o travao dianteiro e traseiro. Uma marca traseira isolada nao significa que o condutor tenha aproveitado toda a aderencia disponivel.',
87
+ },
88
+ {
89
+ type: 'diagnostic',
90
+ variant: 'warning',
91
+ title: 'Ferramenta educativa e laboratorio',
92
+ badge: 'Didatico',
93
+ html: 'Sistemas ABS, o desgaste do piso do pneu e os impactos alteram a velocidade real. Em descidas muito acentuadas que anulem a travagem, o sistema recusa-se a calcular por impossibilidade 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: 'Imperial',
135
+ disclaimer: 'Uso exclusivamente didatico.',
136
+ lengthLabel: 'Comprimento da marca',
137
+ lengthHint: 'Arraste a marca para ajustar a extensao.',
138
+ gradeLabel: 'Inclinacao',
139
+ gradeHint: 'A subida ajuda a travar, a descida reduz o atrito.',
140
+ surfaceLabel: 'Tipo de piso',
141
+ frictionLabel: 'Coeficiente de atrito',
142
+ frictionHint: 'Escolha um piso ou ajuste manualmente.',
143
+ brakeLabel: 'Travao bloqueado',
144
+ brakeBoth: 'Ambos',
145
+ brakeFront: 'Dianteiro',
146
+ brakeRear: 'Traseiro',
147
+ brakeUnknown: 'Desconhecido',
148
+ speedLabel: 'Velocidade estimada na marca',
149
+ rangeLabel: 'Intervalo estimado',
150
+ dragHint: 'Arraste na estrada para ajustar.',
151
+ emptyMessage: 'Ajuste a marca para calcular a velocidade.',
152
+ invalidMessage: 'Inclinacao excessiva. Travagem impossivel.',
153
+ readyMessage: 'Velocidade calculada.',
154
+ educationalBadge: 'Didatico',
155
+ surfaceDryAsphalt: 'Asfalto seco',
156
+ surfaceWetAsphalt: 'Asfalto molhado',
157
+ surfaceDryConcrete: 'Betao seco',
158
+ surfaceGravel: 'Gravilha',
159
+ surfaceGrass: 'Terra',
160
+ surfaceIce: 'Gelo',
161
+ surfaceCustom: 'Manual',
162
+ sensitivityLabel: 'Margem de erro',
163
+ lowAssumption: 'Baixo',
164
+ highAssumption: 'Alto',
165
+ gradeUphill: 'Subida',
166
+ gradeDownhill: 'Descida',
167
+ gradeLevel: 'Plano',
168
+ measureHint: 'Um teste dinamometrico real e mais preciso.',
169
+ stencilUnitKmh: 'km/h',
170
+ stencilUnitMph: 'mph',
171
+ lengthUnitM: 'm',
172
+ lengthUnitFt: 'ft',
173
+ percentSuffix: '%',
174
+ dragLowLabel: 'Baixo',
175
+ dragMidLabel: 'Medio',
176
+ dragHighLabel: 'Alto',
177
+ },
178
+ seo,
179
+ faqTitle: 'Perguntas frequentes sobre marcas de travagem',
180
+ faq,
181
+ bibliographyTitle: 'Fontes',
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 = 'kalkulyator-skorosti-po-sledu-tormozheniya-mototsikla';
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
+ 'Нет. Официальная автотехническая экспертиза требует профессиональных замеров на месте аварии с помощью динамометра, анализа работы АБС и осмотра эксперта. Этот инструмент является учебной физической лабораторией.',
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
+ { type: 'title', level: 2, text: 'Расчет скорости по тормозному следу мотоцикла' },
43
+ {
44
+ type: 'paragraph',
45
+ html: 'Длина тормозного следа заблокированного колеса позволяет определить минимальную начальную скорость в момент начала торможения. Измерять следует только участок с полностью заблокированным колесом, исключая последующее скольжение мотоцикла на боку по асфальту после падения.',
46
+ },
47
+ { type: 'title', level: 3, text: 'Физическая модель расчета и формула энергии' },
48
+ {
49
+ type: 'paragraph',
50
+ html: 'Модель основана на законе сохранения кинетической энергии при трении скольжения: скорость пропорциональна квадратному корню из удвоенного произведения ускорения свободного падения, коэффициента сцепления и длины следа. Уклон дороги учитывается как векторная составляющая. Подъем помогает торможению, а спуск снижает эффективное сцепление.',
51
+ },
52
+ {
53
+ type: 'list',
54
+ items: [
55
+ 'Автоматическая конвертация единиц измерения длины в метры для точных физических расчетов.',
56
+ 'Стандартные коэффициенты трения для сухого и мокрого асфальта, бетона, гравия и льда.',
57
+ 'Учет динамического перераспределения массы между передней и задней осями мотоцикла.',
58
+ 'Расширенный диапазон неопределенности при неизвестном типе торможения на месте происшествия.',
59
+ ],
60
+ },
61
+ {
62
+ type: 'tip',
63
+ title: 'Измерять только юз колеса',
64
+ html: 'Начинайте замер с первой видимой полосы отложения резины на асфальте и заканчивайте в точке возобновления вращения колеса или места удара. Не включайте след трения пластика.',
65
+ },
66
+ { type: 'title', level: 3, text: 'Типовые коэффициенты трения дорожных покрытий' },
67
+ {
68
+ type: 'table',
69
+ headers: ['Покрытие', 'Среднее трение', 'Диапазон сцепления'],
70
+ rows: [
71
+ ['Сухой асфальт', '0.70', '0.55 - 0.85'],
72
+ ['Влажный асфальт', '0.50', '0.35 - 0.65'],
73
+ ['Сухой бетон', '0.75', '0.60 - 0.90'],
74
+ ['Гравий', '0.50', '0.35 - 0.70'],
75
+ ['Грунт или трава', '0.40', '0.25 - 0.55'],
76
+ ['Лёд', '0.10', '0.05 - 0.18'],
77
+ ],
78
+ },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Это справочные значения коэффициентов сцепления заблокированных шин с дорогой. Динамометрический замер непосредственно на месте ДТП всегда обеспечивает более высокую точность.',
82
+ },
83
+ { type: 'title', level: 3, text: 'Влияние тормозов мотоцикла и перераспределение нагрузки' },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'У мотоциклов раздельный привод переднего и заднего тормозов. Один только след заднего колеса не означает, что водитель использовал весь потенциал сцепления. Инструмент позволяет оценить каждый вариант раздельно.',
87
+ },
88
+ {
89
+ type: 'diagnostic',
90
+ variant: 'warning',
91
+ title: 'Учебная модель и ограничение',
92
+ badge: 'Обучение',
93
+ html: 'Работа системы АБС, износ протектора шин и столкновения меняют реальную скорость. На слишком крутом спуске калькулятор блокирует расчет из-за физической невозможности остановки.',
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: 'RUB' },
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: 'Метрическая',
134
+ unitImperial: 'Имперская',
135
+ disclaimer: 'Исключительно для учебных целей.',
136
+ lengthLabel: 'Длина следа',
137
+ lengthHint: 'Перетащите след для изменения длины.',
138
+ gradeLabel: 'Уклон',
139
+ gradeHint: 'Подъем помогает торможению, спуск снижает сцепление.',
140
+ surfaceLabel: 'Тип покрытия',
141
+ frictionLabel: 'Коэффициент трения',
142
+ frictionHint: 'Выберите покрытие или укажите значение.',
143
+ brakeLabel: 'Торможение',
144
+ brakeBoth: 'Оба колеса',
145
+ brakeFront: 'Переднее',
146
+ brakeRear: 'Заднее',
147
+ brakeUnknown: 'Неизвестно',
148
+ speedLabel: 'Оценочная скорость по следу',
149
+ rangeLabel: 'Диапазон скоростей',
150
+ dragHint: 'Перетаскивайте по дороге.',
151
+ emptyMessage: 'Задайте длину следа для расчета.',
152
+ invalidMessage: 'Слишком крутой спуск. Остановка невозможна.',
153
+ readyMessage: 'Скорость рассчитана.',
154
+ educationalBadge: 'Обучение',
155
+ surfaceDryAsphalt: 'Сухой асфальт',
156
+ surfaceWetAsphalt: 'Влажный асфальт',
157
+ surfaceDryConcrete: 'Сухой бетон',
158
+ surfaceGravel: 'Гравий',
159
+ surfaceGrass: 'Грунт',
160
+ surfaceIce: 'Лёд',
161
+ surfaceCustom: 'Вручную',
162
+ sensitivityLabel: 'Погрешность',
163
+ lowAssumption: 'Низкая',
164
+ highAssumption: 'Высокая',
165
+ gradeUphill: 'Подъем',
166
+ gradeDownhill: 'Спуск',
167
+ gradeLevel: 'Ровно',
168
+ measureHint: 'Реальные замеры точнее табличных значений.',
169
+ stencilUnitKmh: 'км/ч',
170
+ stencilUnitMph: 'миль/ч',
171
+ lengthUnitM: 'м',
172
+ lengthUnitFt: 'фут',
173
+ percentSuffix: '%',
174
+ dragLowLabel: 'Низкое',
175
+ dragMidLabel: 'Среднее',
176
+ dragHighLabel: 'Высокое',
177
+ },
178
+ seo,
179
+ faqTitle: 'Частые вопросы о следах торможения',
180
+ faq,
181
+ bibliographyTitle: 'Источники',
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 = 'motorcykel-bromsspar-hastighetsberaknare';
7
+ const title = 'Motorcykel Bromsspår Hastighetsberäknare';
8
+ const description =
9
+ 'Uppskatta motorcykelns hastighet utifrån bromsspårets längd, vägfriktion och väglutning. Pedagogisk fysikmodell för olycksanalys.';
10
+
11
+ const faq = [
12
+ {
13
+ question: 'Vad visar ett bromsspår ?',
14
+ answer:
15
+ 'Ett låst hjulbromsspår visar sträckan som krävdes för att minska den kinetiska energin genom friktionsvärme. Den fysikaliska energiekvationen beräknar den lägsta initiala hastigheten vid starten av det synliga spåret.',
16
+ },
17
+ {
18
+ question: 'Varför visas resultatet som ett intervall ?',
19
+ answer:
20
+ 'Friktionen på vägbanan och bromskraftsfördelningen mellan fram- och bakhjul innehåller osäkerheter. Beräknaren anger därför lägsta, medel- och högsta värde för att visa uppskattningens känslighet.',
21
+ },
22
+ {
23
+ question: 'Kan resultatet användas i en officiell olycksutredning ?',
24
+ answer:
25
+ 'Nej. En officiella olycksutredning kräver friktionsmätningar med friktionssläde på platsen, analys av ABS-system och undersökning av experter. Detta verktyg är ett pedagogiskt fysiklaboratorium.',
26
+ },
27
+ {
28
+ question: 'Hur skiljer sig detta från en bromssträckaberäknare ?',
29
+ answer:
30
+ 'En bromssträckaberäknare utgår från hastigheten för att beräkna stoppsträckan. Detta verktyg räknar baklänges från det uppmätta gummispåret till ett hastighetsintervall utan reaktionstid.',
31
+ },
32
+ ];
33
+
34
+ const howTo = [
35
+ { name: 'Mät spåret', text: 'Mät längden på det synliga låsta däckspåret noggrant i meter eller fot på vägbanan.' },
36
+ { name: 'Välj väglag', text: 'Välj den vägyta som motsvarar platsen eller ange en uppmätt friktionskoefficient manuellt.' },
37
+ { name: 'Ställ in lutning och bromsar', text: 'Ange vägens lutning och specificera vilka bromsar som användes av föraren.' },
38
+ { name: 'Läs av uppskattningen', text: 'Använd medelhastigheten som utgångspunkt och beakta det visade osäkerhetsintervallet.' },
39
+ ];
40
+
41
+ const seo: SEOSection[] = [
42
+ { type: 'title', level: 2, text: 'Beräkna hastighetsintervall från bromsspår' },
43
+ {
44
+ type: 'paragraph',
45
+ html: 'En motorcykel lämnar ofta ett tydligt spår från bakhjulet, ett lättare spår från framhjulet eller ett avbrutet mönster vid fungerande ABS-bromsar. Mät endast den del där hjulet var helt låst på vägbanan, utan att räkna med motorcykelns glidsträcka på kåporna efter en omkullkörning.',
46
+ },
47
+ { type: 'title', level: 3, text: 'Fysikalisk beräkningsmodell och energiekvation' },
48
+ {
49
+ type: 'paragraph',
50
+ html: 'Beräkningsmodellen bygger på energiprincipen vid glidfriktion: hastigheten är proportionell mot kvadratroten ur det dubbla produktvärdet av tyngdaccelerationen, friktionsfaktorn och spårets längd. Vägens lutning ingår som en vektorkomponent. En uppförsbacke underlättar bromsningen, medan en nedförsbacke minskar den effektiva friktionen.',
51
+ },
52
+ {
53
+ type: 'list',
54
+ items: [
55
+ 'Automatisk omvandling av längdmått till meter för exakta fysikaliska beräkningar.',
56
+ 'Inbyggda referensvärden för torr och våt asfalt, betong, grus, jord och is.',
57
+ 'Hänsyn tagen till bromskraftsfördelningen mellan fram- och bakhjul.',
58
+ 'Bredare osäkerhetsintervall när det använda bromssystemet är okänt på olycksplatsen.',
59
+ ],
60
+ },
61
+ {
62
+ type: 'tip',
63
+ title: 'Mät endast det låsta däckspåret',
64
+ html: 'Börja mätningen vid den första synliga gummiskuggan på asfalten och avsluta där hjulet börjar rulla igen eller där kollisionen sker. Räkna inte med ramens glidning mot vägen.',
65
+ },
66
+ { type: 'title', level: 3, text: 'Typiska friktionskoefficienter för vägbanor' },
67
+ {
68
+ type: 'table',
69
+ headers: ['Väglag', 'Medelfriktion', 'Friktionsintervall'],
70
+ rows: [
71
+ ['Torr asfalt', '0.70', '0.55 till 0.85'],
72
+ ['Våt asfalt', '0.50', '0.35 till 0.65'],
73
+ ['Torr betong', '0.75', '0.60 till 0.90'],
74
+ ['Grus', '0.50', '0.35 till 0.70'],
75
+ ['Jord eller gräs', '0.40', '0.25 till 0.55'],
76
+ ['Is', '0.10', '0.05 till 0.18'],
77
+ ],
78
+ },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Dessa är referensvärden för låsta däck som glider på vägbanan. En direkt mätning med friktionssläde på olycksplatsen ger alltid högre noggrannhet än en tabell.',
82
+ },
83
+ { type: 'title', level: 3, text: 'Motorcykelbromsarnas påverkan och viktförskjutning' },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Eftersom motorcyklar har separata reglage för fram- och bakbroms innebär ett enskilt bakhjulsspår inte att föraren har utnyttjat hela väggreppet. Verktyget gör det möjligt att utvärdera olika bromsscenarier.',
87
+ },
88
+ {
89
+ type: 'diagnostic',
90
+ variant: 'warning',
91
+ title: 'Pedagogisk fysikmodell',
92
+ badge: 'Utbildning',
93
+ html: 'ABS-intervaller, däckslitage, belastning och krockenergi ändrar den verkliga hastigheten. Vid för brant nedförsbacke avbryter verktyget beräkningen på grund av fysikalisk omöjlighet.',
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: 'SEK' },
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: 'Metrisk',
134
+ unitImperial: 'Imperial',
135
+ disclaimer: 'Endast för utbildningssyfte.',
136
+ lengthLabel: 'Spårlängd',
137
+ lengthHint: 'Dra spåret för att ändra längden.',
138
+ gradeLabel: 'Lutning',
139
+ gradeHint: 'Uppförsbacke underlättar bromsningen, nedförsbacke minskar friktionen.',
140
+ surfaceLabel: 'Väglag',
141
+ frictionLabel: 'Friktionskoefficient',
142
+ frictionHint: 'Välj vägyta eller ange värde.',
143
+ brakeLabel: 'Låst broms',
144
+ brakeBoth: 'Båda',
145
+ brakeFront: 'Fram',
146
+ brakeRear: 'Bak',
147
+ brakeUnknown: 'Okänd',
148
+ speedLabel: 'Uppskattad hastighet på spåret',
149
+ rangeLabel: 'Hastighetsintervall',
150
+ dragHint: 'Dra på vägen.',
151
+ emptyMessage: 'Ställ in spåret för att beräkna hastighet.',
152
+ invalidMessage: 'För brant lutning. Stopp omöjligt.',
153
+ readyMessage: 'Hastighet beräknad.',
154
+ educationalBadge: 'Utbildning',
155
+ surfaceDryAsphalt: 'Torr asfalt',
156
+ surfaceWetAsphalt: 'Våt asfalt',
157
+ surfaceDryConcrete: 'Torr betong',
158
+ surfaceGravel: 'Grus',
159
+ surfaceGrass: 'Jord',
160
+ surfaceIce: 'Is',
161
+ surfaceCustom: 'Manuell',
162
+ sensitivityLabel: 'Osäkerhetsmarginal',
163
+ lowAssumption: 'Låg',
164
+ highAssumption: 'Hög',
165
+ gradeUphill: 'Uppför',
166
+ gradeDownhill: 'Nedför',
167
+ gradeLevel: 'Plan',
168
+ measureHint: 'Mätning på plats är noggrannare än en tabell.',
169
+ stencilUnitKmh: 'km/h',
170
+ stencilUnitMph: 'mph',
171
+ lengthUnitM: 'm',
172
+ lengthUnitFt: 'ft',
173
+ percentSuffix: '%',
174
+ dragLowLabel: 'Låg',
175
+ dragMidLabel: 'Medel',
176
+ dragHighLabel: 'Hög',
177
+ },
178
+ seo,
179
+ faqTitle: 'Vanliga frågor om bromsspår',
180
+ faq,
181
+ bibliographyTitle: 'Källor',
182
+ bibliography: bibliographyEntries,
183
+ howTo,
184
+ schemas,
185
+ };