@jjlmoya/utils-diy 1.13.0 → 1.14.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.
- package/package.json +1 -1
- package/src/entries.ts +3 -1
- package/src/index.ts +2 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/pythagoreanRightAngleCalculator/bibliography.astro +6 -0
- package/src/tool/pythagoreanRightAngleCalculator/bibliography.ts +12 -0
- package/src/tool/pythagoreanRightAngleCalculator/component.astro +238 -0
- package/src/tool/pythagoreanRightAngleCalculator/entry.ts +24 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/de.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/en.ts +129 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/es.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/fr.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/id.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/it.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/ja.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/ko.ts +129 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/nl.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/pl.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/pt.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/ru.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/sv.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/tr.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/i18n/zh.ts +127 -0
- package/src/tool/pythagoreanRightAngleCalculator/index.ts +11 -0
- package/src/tool/pythagoreanRightAngleCalculator/logic.ts +96 -0
- package/src/tool/pythagoreanRightAngleCalculator/pythagorean-right-angle-calculator.css +378 -0
- package/src/tool/pythagoreanRightAngleCalculator/seo.astro +15 -0
- package/src/tool/pythagoreanRightAngleCalculator/ui.ts +71 -0
- package/src/tools.ts +2 -1
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { PythagoreanRightAngleCalculatorUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'pythagoras-sats-rat-vinkel-kalkylator-3-4-5-regeln';
|
|
7
|
+
const title = 'Pythagoras Rät Vinkel Kalkylator: 3 4 5 regeln för perfekta vinklar';
|
|
8
|
+
const description = 'Kontrollera om strukturer är perfekt rätvinkliga (90°) med Pythagoras sats och 3-4-5-regeln. Oumbärligt verktyg för bygg, snickeri och DIY-projekt.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Vad är 3-4-5-regeln?',
|
|
13
|
+
answer: '3-4-5-regeln är en enkel pythagoreisk trippel. Om en rätvinklig triangel har sidor på 3, 4 och 5 enheter i vilken skala som helst, är vinkeln mellan de kortare sidorna exakt 90 grader. Denna beprövade metod har använts inom byggbranschen i århundraden.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: 'Hur använder jag denna kalkylator?',
|
|
17
|
+
answer: 'Ange längderna på de två väggarna (sidorna A och B) som bildar hörnet. Kalkylatorn visar vad diagonalen ska vara för en perfekt 90-graders vinkel. Mät sedan din faktiska diagonal och ange den för att kontrollera om ditt hörn verkligen är rätvinkligt.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: 'Vad händer om min diagonal är annorlunda?',
|
|
21
|
+
answer: 'Om din uppmätta diagonal skiljer sig från den ideala, visar kalkylatorn avvikelsen. Grönt betyder perfekt, gult betyder acceptabelt, rött betyder inte rätvinkligt. Den anger också om du ska öppna eller stänga vinkeln.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: 'Är detta tillräckligt exakt för byggarbeten?',
|
|
25
|
+
answer: 'Ja. Pythagoras sats är matematiskt exakt. Med ett måttband kan du uppnå byggnadsteknisk precision utan specialverktyg eller avancerade kunskaper.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Kan jag växla mellan tum och fot?',
|
|
29
|
+
answer: 'Ja. Välj tum för små projekt eller fot för större strukturer. Alla värden omvandlas omedelbart utan att data går förlorad.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{ name: 'Välj enhet', text: 'Välj tum för detaljarbeten eller fot för större strukturer. Du kan byta när som helst.' },
|
|
35
|
+
{ name: 'Mät båda sidor', text: 'Mät längden på de två väggarna (sidorna A och B) som bildar hörnet du vill kontrollera.' },
|
|
36
|
+
{ name: 'Kontrollera den ideala diagonalen', text: 'Kalkylatorn visar dig vad diagonalen måste vara för en perfekt 90-graders vinkel.' },
|
|
37
|
+
{ name: 'Mät din diagonal', text: 'Använd ett måttband för att mäta din faktiska diagonal. Ange den i det valfria fältet.' },
|
|
38
|
+
{ name: 'Läs av status', text: 'Grönt = perfekt rätvinkligt. Gult = acceptabelt. Rött = inte rätvinkligt. Justera enligt förslaget.' },
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'FAQPage',
|
|
44
|
+
mainEntity: faqData.map((item) => ({
|
|
45
|
+
'@type': 'Question',
|
|
46
|
+
name: item.question,
|
|
47
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const howToSchema: WithContext<any> = {
|
|
52
|
+
'@context': 'https://schema.org',
|
|
53
|
+
'@type': 'HowTo',
|
|
54
|
+
name: title,
|
|
55
|
+
description,
|
|
56
|
+
step: howToData.map((step, i) => ({
|
|
57
|
+
'@type': 'HowToStep',
|
|
58
|
+
position: i + 1,
|
|
59
|
+
name: step.name,
|
|
60
|
+
text: step.text,
|
|
61
|
+
})),
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
65
|
+
'@context': 'https://schema.org',
|
|
66
|
+
'@type': 'SoftwareApplication',
|
|
67
|
+
name: title,
|
|
68
|
+
description,
|
|
69
|
+
applicationCategory: 'UtilityApplication',
|
|
70
|
+
operatingSystem: 'All',
|
|
71
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
72
|
+
inLanguage: 'sv',
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export const content: ToolLocaleContent<PythagoreanRightAngleCalculatorUI> = {
|
|
76
|
+
slug,
|
|
77
|
+
title,
|
|
78
|
+
description,
|
|
79
|
+
faqTitle: 'Vanliga frågor',
|
|
80
|
+
faq: faqData,
|
|
81
|
+
bibliography,
|
|
82
|
+
howTo: howToData,
|
|
83
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
84
|
+
seo: [
|
|
85
|
+
{ type: 'title', text: 'Pythagoras sats i praktiken', level: 2 },
|
|
86
|
+
{ type: 'paragraph', html: 'En perfekt 90-graders vinkel är grundläggande för kvalitetsbyggande. Väggar måste vara vinkelräta, fundament måste vara rätvinkliga och ramar måste vara raka. Pythagoras sats erbjuder en matematiskt garanterad metod: a² + b² = c².' },
|
|
87
|
+
{ type: 'title', text: 'Varför 3-4-5-regeln fungerar', level: 3 },
|
|
88
|
+
{ type: 'paragraph', html: '3-4-5-regeln är den enklaste pythagoreiska trippeln. Oavsett om du mäter i tum, fot eller någon annan enhet: sidor på 3, 4 och 5 enheter garanterar en 90-graders vinkel. Detta är matematiskt bevisat och har testats inom byggbranschen i århundraden.' },
|
|
89
|
+
{ type: 'title', text: 'Precision utan specialverktyg', level: 3 },
|
|
90
|
+
{ type: 'paragraph', html: 'Till skillnad från vattenpass eller vinkelhakar som kan gå sönder eller komma ur inställning, är Pythagoras sats oföränderlig. Med bara ett måttband kan du kontrollera vilket hörn som helst i vilken skala som helst. Denna kalkylator gör att du slipper huvudräkning och säkerställer noggrannhet.' },
|
|
91
|
+
{ type: 'title', text: 'Från teori till praktisk vägledning', level: 3 },
|
|
92
|
+
{ type: 'paragraph', html: 'Denna kalkylator omvandlar abstrakt matematik till praktiska instruktioner på plats. Om din diagonal inte stämmer, talar den om exakt hur mycket och i vilken riktning du ska justera. Förvandla teori till verkliga resultat på bygget.' },
|
|
93
|
+
],
|
|
94
|
+
ui: {
|
|
95
|
+
titleMain: 'Rätvinklighets-kalkylator (Pythagoras)',
|
|
96
|
+
labelInputData: 'Mätningar',
|
|
97
|
+
labelUnitSelection: 'Enhet',
|
|
98
|
+
btnUnitInches: 'tum',
|
|
99
|
+
btnUnitFeet: 'fot',
|
|
100
|
+
labelSideA: 'Sida A',
|
|
101
|
+
labelSideB: 'Sida B',
|
|
102
|
+
labelMeasuredDiagonal: 'Uppmätt diagonal (valfritt)',
|
|
103
|
+
labelResults: 'Resultat',
|
|
104
|
+
labelIdealDiagonal: 'Ideal diagonal',
|
|
105
|
+
labelDeviation: 'Avvikelse',
|
|
106
|
+
labelStatus: 'Status',
|
|
107
|
+
labelVerification: 'Rätvinklighets-kontroll',
|
|
108
|
+
btnClear: 'Rensa',
|
|
109
|
+
btnCopyResults: 'Kopiera resultat',
|
|
110
|
+
labelPresets: 'Snabbval',
|
|
111
|
+
unitInches: 'tum',
|
|
112
|
+
unitFeet: 'fot',
|
|
113
|
+
tooltipOptional: 'Ange din uppmätta diagonal för att kontrollera 90-graders vinkeln',
|
|
114
|
+
tooltipPresets: '3-4-5-regeln i olika skalor',
|
|
115
|
+
statusPerfect: 'Perfekt 90-graders vinkel',
|
|
116
|
+
statusAcceptable: 'Acceptabel avvikelse',
|
|
117
|
+
statusWarning: 'Mindre avvikelse',
|
|
118
|
+
statusError: 'Inte rätvinkligt',
|
|
119
|
+
statusReady: 'Klar',
|
|
120
|
+
msgIdealCalculated: 'Ideal diagonal beräknad',
|
|
121
|
+
actionOpen: 'Öppna',
|
|
122
|
+
actionClose: 'Stäng',
|
|
123
|
+
descLarger: 'större',
|
|
124
|
+
descSmaller: 'mindre',
|
|
125
|
+
descCorrection: 'Korrigering krävs',
|
|
126
|
+
},
|
|
127
|
+
};
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { PythagoreanRightAngleCalculatorUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'pisagor-teoremi-dik-aci-hesaplama-3-4-5-kurali';
|
|
7
|
+
const title = 'Pisagor Dik Açı Hesaplayıcı: Mükemmel Gönye İçin 3 4 5 Kuralı';
|
|
8
|
+
const description = 'Pisagor teoremini ve 3-4-5 kuralını kullanarak yapıların mükemmel şekilde gönyede (90°) olup olmadığını doğrulayın. İnşaat, marangozluk ve DIY projeleri için temel araç.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: '3-4-5 kuralı nedir?',
|
|
13
|
+
answer: '3-4-5 kuralı basit bir Pisagor üçlüsüdür. Dik bir üçgenin herhangi bir ölçekte 3, 4 ve 5 birimlik kenarları varsa, kısa kenarlar arasındaki açı tam olarak 90 derecedir. Bu sahada kanıtlanmış yöntem, yüzyıllardır inşaatlarda kullanılmaktadır.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: 'Bu hesaplayıcıyı nasıl kullanırım?',
|
|
17
|
+
answer: 'Köşeyi oluşturan iki duvarın (A ve B kenarları) uzunluklarını girin. Hesaplayıcı, mükemmel bir 90 derecelik açı için diyagonalin ne olması gerektiğini gösterir. Ardından gerçek diyagonalinizi ölçün ve köşenizin gerçekten gönyede olup olmadığını doğrulamak için girin.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: 'Diyagonalim farklıysa ne olur?',
|
|
21
|
+
answer: 'Ölçülen diyagonaliniz ideal olandan farklıysa, hesaplayıcı sapmayı gösterir. Yeşil mükemmel, sarı kabul edilebilir, kırmızı ise gönye dışı anlamına gelir. Ayrıca açıyı açmanız mı yoksa kapatmanız mı gerektiğini de söyler.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: 'Bu inşaat için yeterince hassas mı?',
|
|
25
|
+
answer: 'Evet. Pisagor teoremi matematiksel olarak kesindir. Bir şerit metre ile, özel aletlere veya ileri düzey becerilere ihtiyaç duymadan inşaat sınıfı hassasiyete ulaşabilirsiniz.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'İnç ve fit arasında geçiş yapabilir miyim?',
|
|
29
|
+
answer: 'Evet. Küçük projeler için inç, daha büyük yapılar için fit seçin. Tüm değerler veri kaybı olmadan anında dönüştürülür.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{ name: 'Biriminizi seçin', text: 'Detaylı işler için inç, daha büyük yapılar için fit seçin. İstediğiniz zaman değiştirebilirsiniz.' },
|
|
35
|
+
{ name: 'Her iki kenarı ölçün', text: 'Kontrol etmek istediğiniz köşeyi oluşturan iki duvarın (A ve B kenarları) uzunluğunu ölçün.' },
|
|
36
|
+
{ name: 'İdeal diyagonali kontrol edin', text: 'Hesaplayıcı, mükemmel 90 derecelik açı için diyagonalin ne olması gerektiğini gösterir.' },
|
|
37
|
+
{ name: 'Diyagonalinizi ölçün', text: 'Gerçek diyagonalinizi ölçmek için bir şerit metre kullanın. İsteğe bağlı alana girin.' },
|
|
38
|
+
{ name: 'Durumu okuyun', text: 'Yeşil = mükemmel gönye. Sarı = kabul edilebilir. Kırmızı = gönye dışı. Önerildiği gibi ayarlayın.' },
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'FAQPage',
|
|
44
|
+
mainEntity: faqData.map((item) => ({
|
|
45
|
+
'@type': 'Question',
|
|
46
|
+
name: item.question,
|
|
47
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const howToSchema: WithContext<any> = {
|
|
52
|
+
'@context': 'https://schema.org',
|
|
53
|
+
'@type': 'HowTo',
|
|
54
|
+
name: title,
|
|
55
|
+
description,
|
|
56
|
+
step: howToData.map((step, i) => ({
|
|
57
|
+
'@type': 'HowToStep',
|
|
58
|
+
position: i + 1,
|
|
59
|
+
name: step.name,
|
|
60
|
+
text: step.text,
|
|
61
|
+
})),
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
65
|
+
'@context': 'https://schema.org',
|
|
66
|
+
'@type': 'SoftwareApplication',
|
|
67
|
+
name: title,
|
|
68
|
+
description,
|
|
69
|
+
applicationCategory: 'UtilityApplication',
|
|
70
|
+
operatingSystem: 'All',
|
|
71
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
72
|
+
inLanguage: 'tr',
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export const content: ToolLocaleContent<PythagoreanRightAngleCalculatorUI> = {
|
|
76
|
+
slug,
|
|
77
|
+
title,
|
|
78
|
+
description,
|
|
79
|
+
faqTitle: 'Sıkça Sorulan Sorular',
|
|
80
|
+
faq: faqData,
|
|
81
|
+
bibliography,
|
|
82
|
+
howTo: howToData,
|
|
83
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
84
|
+
seo: [
|
|
85
|
+
{ type: 'title', text: 'Uygulamada Pisagor Teoremi', level: 2 },
|
|
86
|
+
{ type: 'paragraph', html: 'Mükemmel bir 90 derecelik açı, kaliteli inşaatın temelidir. Duvarlar dik olmalı, temeller gönyesinde olmalı ve çerçeveler doğru hizalanmalıdır. Pisagor teoremi matematiksel olarak garantili bir yöntem sunar: a² + b² = c².' },
|
|
87
|
+
{ type: 'title', text: '3-4-5 Kuralı neden çalışır?', level: 3 },
|
|
88
|
+
{ type: 'paragraph', html: '3-4-5 kuralı en basit Pisagor üçlüsüdür. İster inç, ister fit veya başka bir birimle ölçün; 3, 4 ve 5 birimlik kenarlar 90 derecelik açıyı garanti eder. Bu matematiksel olarak kanıtlanmıştır ve yüzyıllardır inşaatlarda test edilmiştir.' },
|
|
89
|
+
{ type: 'title', text: 'Özel aletler olmadan hassasiyet', level: 3 },
|
|
90
|
+
{ type: 'paragraph', html: 'Kırılabilecek veya ayarı bozulabilecek su terazileri veya gönyelerin aksine, Pisagor teoremi değişmezdir. Sadece bir şerit metre ile her köşeyi her ölçekte doğrulayabilirsiniz. Bu hesaplayıcı zihinden hesap yapma zorunluluğunu ortadan kaldırır ve doğruluğu sağlar.' },
|
|
91
|
+
{ type: 'title', text: 'Teoriden pratik rehberliğe', level: 3 },
|
|
92
|
+
{ type: 'paragraph', html: 'Bu hesaplayıcı soyut matematiği pratik saha talimatlarına dönüştürür. Diyagonaliniz hatalıysa, ne kadar ve hangi yönde ayarlama yapmanız gerektiğini tam olarak söyler. Teoriyi şantiyede gerçek sonuçlara dönüştürün.' },
|
|
93
|
+
],
|
|
94
|
+
ui: {
|
|
95
|
+
titleMain: 'Gönye Hesaplayıcı (Pisagor)',
|
|
96
|
+
labelInputData: 'Ölçümler',
|
|
97
|
+
labelUnitSelection: 'Birim',
|
|
98
|
+
btnUnitInches: 'inç',
|
|
99
|
+
btnUnitFeet: 'fit',
|
|
100
|
+
labelSideA: 'A Kenarı',
|
|
101
|
+
labelSideB: 'B Kenarı',
|
|
102
|
+
labelMeasuredDiagonal: 'Ölçülen diyagonal (isteğe bağlı)',
|
|
103
|
+
labelResults: 'Sonuçlar',
|
|
104
|
+
labelIdealDiagonal: 'İdeal diyagonal',
|
|
105
|
+
labelDeviation: 'Sapma',
|
|
106
|
+
labelStatus: 'Durum',
|
|
107
|
+
labelVerification: 'Gönye doğrulaması',
|
|
108
|
+
btnClear: 'Temizle',
|
|
109
|
+
btnCopyResults: 'Sonuçları kopyala',
|
|
110
|
+
labelPresets: 'Hızlı ayarlar',
|
|
111
|
+
unitInches: 'in',
|
|
112
|
+
unitFeet: 'ft',
|
|
113
|
+
tooltipOptional: '90 derecelik açıyı doğrulamak için ölçülen diyagonali girin',
|
|
114
|
+
tooltipPresets: 'Farklı ölçeklerde 3-4-5 kuralı',
|
|
115
|
+
statusPerfect: 'Mükemmel 90 derece açı',
|
|
116
|
+
statusAcceptable: 'Kabul edilebilir sapma',
|
|
117
|
+
statusWarning: 'Küçük sapma',
|
|
118
|
+
statusError: 'Gönye dışı',
|
|
119
|
+
statusReady: 'Hazır',
|
|
120
|
+
msgIdealCalculated: 'İdeal diyagonal hesaplandı',
|
|
121
|
+
actionOpen: 'Aç',
|
|
122
|
+
actionClose: 'Kapat',
|
|
123
|
+
descLarger: 'daha büyük',
|
|
124
|
+
descSmaller: 'daha küçük',
|
|
125
|
+
descCorrection: 'Düzeltme gerekli',
|
|
126
|
+
},
|
|
127
|
+
};
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { PythagoreanRightAngleCalculatorUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'pythagorean-right-angle-calculator-3-4-5-rule';
|
|
7
|
+
const title = '直角计算器(勾股定理):完美直角的 3 4 5 法则';
|
|
8
|
+
const description = '使用勾股定理和 3-4-5 法则验证结构是否完美垂直(90°)。建筑、木工和 DIY 项目的必备工具。';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: '什么是 3-4-5 法则?',
|
|
13
|
+
answer: '3-4-5 法则是勾股数的一种。如果一个直角三角形的边在任何比例下分别为 3、4 和 5 个单位,则较短边之间的夹角正好是 90 度。这种经过现场验证的方法已在建筑行业使用了几个世纪。',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: '如何使用此计算器?',
|
|
17
|
+
answer: '输入形成拐角的两面墙(边 A 和边 B)的长度。计算器将显示完美 90 度角所需的对角线长度。然后测量您的实际对角线并输入,以验证您的拐角是否真正垂直。',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: '如果我的对角线不同怎么办?',
|
|
21
|
+
answer: '如果您的测量对角线与理想值不同,计算器会显示偏差。绿色表示完美,黄色表示可以接受,红色表示不垂直。它还会告诉您应该扩大还是缩小角度。',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: '这对于建筑工程来说足够精确吗?',
|
|
25
|
+
answer: '是的。勾股定理在数学上是精确的。使用卷尺,您就可以达到建筑级的精度,而无需专业工具或高级技能。',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: '我可以在英寸和英尺之间切换吗?',
|
|
29
|
+
answer: '是的。对于小型项目选择英寸,对于大型结构选择英尺。所有数值都会立即转换,不会丢失数据。',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{ name: '选择单位', text: '对于精细工作选择英寸,对于大型结构选择英尺。您可以随时切换。' },
|
|
35
|
+
{ name: '测量两边', text: '测量形成您要检查的拐角的两面墙(边 A 和边 B)的长度。' },
|
|
36
|
+
{ name: '检查理想对角线', text: '计算器会告诉您完美 90 度角所需的对角线长度。' },
|
|
37
|
+
{ name: '测量您的对角线', text: '使用卷尺测量您的实际对角线。将其输入到可选字段中。' },
|
|
38
|
+
{ name: '查看状态', text: '绿色 = 完美直角。黄色 = 可接受。红色 = 不垂直。根据建议进行调整。' },
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'FAQPage',
|
|
44
|
+
mainEntity: faqData.map((item) => ({
|
|
45
|
+
'@type': 'Question',
|
|
46
|
+
name: item.question,
|
|
47
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
48
|
+
})),
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const howToSchema: WithContext<any> = {
|
|
52
|
+
'@context': 'https://schema.org',
|
|
53
|
+
'@type': 'HowTo',
|
|
54
|
+
name: title,
|
|
55
|
+
description,
|
|
56
|
+
step: howToData.map((step, i) => ({
|
|
57
|
+
'@type': 'HowToStep',
|
|
58
|
+
position: i + 1,
|
|
59
|
+
name: step.name,
|
|
60
|
+
text: step.text,
|
|
61
|
+
})),
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
65
|
+
'@context': 'https://schema.org',
|
|
66
|
+
'@type': 'SoftwareApplication',
|
|
67
|
+
name: title,
|
|
68
|
+
description,
|
|
69
|
+
applicationCategory: 'UtilityApplication',
|
|
70
|
+
operatingSystem: 'All',
|
|
71
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
72
|
+
inLanguage: 'zh',
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export const content: ToolLocaleContent<PythagoreanRightAngleCalculatorUI> = {
|
|
76
|
+
slug,
|
|
77
|
+
title,
|
|
78
|
+
description,
|
|
79
|
+
faqTitle: '常见问题',
|
|
80
|
+
faq: faqData,
|
|
81
|
+
bibliography,
|
|
82
|
+
howTo: howToData,
|
|
83
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
84
|
+
seo: [
|
|
85
|
+
{ type: 'title', text: '勾股定理在实践中的应用', level: 2 },
|
|
86
|
+
{ type: 'paragraph', html: '完美的 90 度角是高质量建筑的基础。墙壁必须垂直,地基必须方正,框架必须平直。勾股定理提供了一种数学上保证的方法:a² + b² = c²。' },
|
|
87
|
+
{ type: 'title', text: '为什么 3-4-5 法则有效', level: 3 },
|
|
88
|
+
{ type: 'paragraph', html: '3-4-5 法则是最简单的勾股数。无论您使用英寸、英尺还是任何其他单位进行测量:边长为 3、4 和 5 个单位就能保证 90 度角。这已在数学上得到证明,并在建筑行业经过了几个世纪的测试。' },
|
|
89
|
+
{ type: 'title', text: '无需专业工具的精度', level: 3 },
|
|
90
|
+
{ type: 'paragraph', html: '与可能会损坏或失准的水准仪或直角尺不同,勾股定理是永恒不变的。只需一把卷尺,您就可以在任何比例下验证任何拐角。此计算器免去了心算,并确保了准确性。' },
|
|
91
|
+
{ type: 'title', text: '从理论到实践指导', level: 3 },
|
|
92
|
+
{ type: 'paragraph', html: '此计算器将抽象的数学转化为实用的现场操作说明。如果您的对角线有偏差,它会准确地告诉您调整多少以及调整的方向。将理论转化为工地的实际成果。' },
|
|
93
|
+
],
|
|
94
|
+
ui: {
|
|
95
|
+
titleMain: '直角计算器(勾股定理)',
|
|
96
|
+
labelInputData: '测量值',
|
|
97
|
+
labelUnitSelection: '单位',
|
|
98
|
+
btnUnitInches: '英寸',
|
|
99
|
+
btnUnitFeet: '英尺',
|
|
100
|
+
labelSideA: '边 A',
|
|
101
|
+
labelSideB: '边 B',
|
|
102
|
+
labelMeasuredDiagonal: '测量对角线(可选)',
|
|
103
|
+
labelResults: '结果',
|
|
104
|
+
labelIdealDiagonal: '理想对角线',
|
|
105
|
+
labelDeviation: '偏差',
|
|
106
|
+
labelStatus: '状态',
|
|
107
|
+
labelVerification: '直角验证',
|
|
108
|
+
btnClear: '清除',
|
|
109
|
+
btnCopyResults: '复制结果',
|
|
110
|
+
labelPresets: '快速预设',
|
|
111
|
+
unitInches: 'in',
|
|
112
|
+
unitFeet: 'ft',
|
|
113
|
+
tooltipOptional: '输入测得的对角线以验证 90 度直角',
|
|
114
|
+
tooltipPresets: '不同比例下的 3-4-5 法则',
|
|
115
|
+
statusPerfect: '完美 90 度直角',
|
|
116
|
+
statusAcceptable: '偏差在可接受范围内',
|
|
117
|
+
statusWarning: '轻微偏差',
|
|
118
|
+
statusError: '不垂直',
|
|
119
|
+
statusReady: '就绪',
|
|
120
|
+
msgIdealCalculated: '已计算理想对角线',
|
|
121
|
+
actionOpen: '扩大角度',
|
|
122
|
+
actionClose: '缩小角度',
|
|
123
|
+
descLarger: '偏大',
|
|
124
|
+
descSmaller: '偏小',
|
|
125
|
+
descCorrection: '需要修正',
|
|
126
|
+
},
|
|
127
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ToolDefinition } from '../../types';
|
|
2
|
+
import { pythagoreanRightAngleCalculator } from './entry';
|
|
3
|
+
export * from './entry';
|
|
4
|
+
export const PYTHAGOREAN_RIGHT_ANGLE_CALCULATOR_TOOL: ToolDefinition = {
|
|
5
|
+
entry: pythagoreanRightAngleCalculator,
|
|
6
|
+
Component: () => import('./component.astro'),
|
|
7
|
+
SEOComponent: () => import('./seo.astro'),
|
|
8
|
+
BibliographyComponent: () => import('./bibliography.astro'),
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export type { PythagoreanRightAngleCalculatorUI } from './ui';
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
export interface SquaringCalculation {
|
|
2
|
+
sideA: number;
|
|
3
|
+
sideB: number;
|
|
4
|
+
hypotenuse: number;
|
|
5
|
+
measuredDiagonal: number | null;
|
|
6
|
+
deviation: number | null;
|
|
7
|
+
deviationPercent: number | null;
|
|
8
|
+
status: 'perfect' | 'acceptable' | 'warning' | 'error' | 'idle';
|
|
9
|
+
message: string;
|
|
10
|
+
correction: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface StatusResult {
|
|
14
|
+
status: 'perfect' | 'acceptable' | 'warning' | 'error';
|
|
15
|
+
message: string;
|
|
16
|
+
correction: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function getStatusLevel(absDev: number, deviationPercent: number): 'perfect' | 'acceptable' | 'warning' | 'error' {
|
|
20
|
+
if (absDev < 0.5) return 'perfect';
|
|
21
|
+
if (deviationPercent < 0.5) return 'acceptable';
|
|
22
|
+
if (deviationPercent < 1) return 'warning';
|
|
23
|
+
return 'error';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function getStatusMessage(status: 'perfect' | 'acceptable' | 'warning' | 'error', ui: Record<string, string>): string {
|
|
27
|
+
const msgs = {
|
|
28
|
+
perfect: ui.statusPerfect || 'Perfect 90 degree angle',
|
|
29
|
+
acceptable: ui.statusAcceptable || 'Acceptable deviation',
|
|
30
|
+
warning: ui.statusWarning || 'Minor deviation',
|
|
31
|
+
error: ui.statusError || 'Out of square'
|
|
32
|
+
};
|
|
33
|
+
return msgs[status];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function getCorrection(status: 'perfect' | 'acceptable' | 'warning' | 'error', params: { absDev: number; devDir: string; action: string; ui: Record<string, string> }): string {
|
|
37
|
+
if (status === 'perfect') return '';
|
|
38
|
+
const fixStr = (val: number) => val.toFixed(1);
|
|
39
|
+
const { absDev, devDir, action, ui } = params;
|
|
40
|
+
if (status === 'acceptable') return `${action} the angle slightly. Diagonal is ${fixStr(absDev)} ${devDir}.`;
|
|
41
|
+
if (status === 'warning') return `${action} the angle. Diagonal is ${fixStr(absDev)} ${devDir}.`;
|
|
42
|
+
return `${ui.descCorrection || 'Correction'}: diagonal ${fixStr(absDev)} ${devDir} than ideal.`;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function determineStatus(deviation: number, deviationPercent: number, ui: Record<string, string>): StatusResult {
|
|
46
|
+
const absDev = Math.abs(deviation);
|
|
47
|
+
const devDir = deviation > 0 ? (ui.descLarger || 'larger') : (ui.descSmaller || 'smaller');
|
|
48
|
+
const action = deviation > 0 ? (ui.actionClose || 'Close') : (ui.actionOpen || 'Open');
|
|
49
|
+
const status = getStatusLevel(absDev, deviationPercent);
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
status,
|
|
53
|
+
message: getStatusMessage(status, ui),
|
|
54
|
+
correction: getCorrection(status, { absDev, devDir, action, ui })
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function calculateSquaring(
|
|
59
|
+
sideA: number,
|
|
60
|
+
sideB: number,
|
|
61
|
+
measuredDiagonal: number | null = null,
|
|
62
|
+
ui: Record<string, string> = {}
|
|
63
|
+
): SquaringCalculation {
|
|
64
|
+
const baseResult: Omit<SquaringCalculation, 'status' | 'message' | 'correction'> = {
|
|
65
|
+
sideA,
|
|
66
|
+
sideB,
|
|
67
|
+
hypotenuse: 0,
|
|
68
|
+
measuredDiagonal: null,
|
|
69
|
+
deviation: null,
|
|
70
|
+
deviationPercent: null
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
if (sideA <= 0 || sideB <= 0) {
|
|
74
|
+
return { ...baseResult, status: 'idle', message: '', correction: '' };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const hypotenuse = Math.sqrt(sideA ** 2 + sideB ** 2);
|
|
78
|
+
baseResult.hypotenuse = hypotenuse;
|
|
79
|
+
|
|
80
|
+
if (!measuredDiagonal || measuredDiagonal <= 0) {
|
|
81
|
+
return { ...baseResult, status: 'acceptable', message: ui.msgIdealCalculated || 'Diagonal ideal calculated', correction: '' };
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const deviation = measuredDiagonal - hypotenuse;
|
|
85
|
+
const deviationPercent = (Math.abs(deviation) / hypotenuse) * 100;
|
|
86
|
+
const { status, message, correction } = determineStatus(deviation, deviationPercent, ui);
|
|
87
|
+
|
|
88
|
+
return { ...baseResult, measuredDiagonal, deviation, deviationPercent, status, message, correction };
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export const PRESET_RULES = [
|
|
92
|
+
{ label: '3-4-5', a: 3, b: 4, c: 5 },
|
|
93
|
+
{ label: '6-8-10', a: 6, b: 8, c: 10 },
|
|
94
|
+
{ label: '30-40-50', a: 30, b: 40, c: 50 },
|
|
95
|
+
{ label: '15-20-25', a: 15, b: 20, c: 25 }
|
|
96
|
+
];
|