Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

基于 r/ABraThatFits 的完美计算器 #920

Merged
merged 5 commits into from
Oct 28, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
164 changes: 74 additions & 90 deletions content/zh-cn/cup-calculator.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,106 +24,90 @@ description: "罩杯计算器"

**运算都在您的本地完成,不收集任何数据**

1. 请准备一根软尺并面对镜子,看得到胸部
1. 请直立,放松,用软尺贴合乳房下缘<span style="text-decoration:underline; text-decoration-thickness: 2px;">⊙⊙</span>,水平绕身体一量圈: <input type="text" id="val1"/> cm
1. 请呼气:<input type="text" id="val2"/> cm
1. 请直立,放松,用软尺经过乳头<span style="text-decoration:line-through; text-decoration-thickness: 2px;">⊙⊙</span>,绕身体一量圈:<input type="text" id="val3"/> cm
1. 请俯身 45 度:<input type="text" id="val4"/> cm
1. 请鞠躬 90 度:<input type="text" id="val5"/> cm
1. 请准备一根软尺并面对镜子,看得到胸部。请脱去衣物。
1. 请直立,放松,用软尺贴合乳房下缘<span style="text-decoration:underline; text-decoration-thickness: 2px;">⊙⊙</span>,水平绕身体一量圈,保持水平、完全不要拉紧: <input type="text" id="und-loose"/> cm
1. 请继续保持水平,稍微拉紧到舒适(内衣应有)的程度: <input type="text" id="und-snug"/> cm
1. 请呼气、彻底拉紧:<input type="text" id="und-tight"/> cm
1. 请直立,放松,用软尺经过乳头<span style="text-decoration:line-through; text-decoration-thickness: 2px;">⊙⊙</span>,绕身体一量圈:<input type="text" id="up-up"/> cm
1. 请鞠躬 90 度:<input type="text" id="up-lean"/> cm
1. 请躺倒 90 度:<input type="text" id="up-down"/> cm

国际通用罩杯计算方法:
<button onclick="cup()" type="submit">提交</button>

- 下胸围 + 11 cm + n × 2 cm = 胸围
<ul id="results">
<li>有效胸围、调整围差:<span id="diff"></span></li>
<li>欧式 2 cm 罩杯:<span id="eu"></span></li>
<li>中式 2.5 cm 罩杯:<span id="cn"></span></li>
</ul>

- 罩杯 n =(胸围 − 下胸围 − 11) / 2
* * *

数字 n 代表罩杯 (A=1、B=2、C=3依此类推)。例如,胸围和下胸围差为15 cm (n=2)表示B罩杯。
罩杯计算方法:

中国尺码计算方法:
- 取“舒适”下胸围作为下胸围,四舍五入到最近的可用尺码。
- 欧盟使用 5 cm 单位,并且减去 10 cm。例如 82 cm 会被转换为 70 cm。
- 中国奶糖派使用 5 cm 单位,但似乎不减去 10 cm。所以 82 cm 会转换为 80 cm。
- “彻底拉紧”不用于实际计算,只用于建议“舒适”程度输入:
- 较宽的下胸围意味着更多的弹性材料,允许使用更小的“舒适”值。一般来说小于 80 cm 者可能需要增加舒适值(向上入),大于 90 cm 者可能需要降低舒适值(向下舍)。
- 如果“彻底拉紧”下胸围和“舒适”的差别小于 5 cm,考虑增加“舒适”值
- 如果“彻底拉紧”下胸围和“舒适”的差别大于 10 cm,考虑降低“舒适”值
- 取 (站 + 鞠 &times; 2 + 卧 &times; 2) / 5 加权平均为胸围(AMAB 加权法)
- 胸围减去“不拉紧”下胸围,为初始围差
- 围差加入调整值,(“不拉紧” - 胸围) / 2
- 围差四舍五入到最近的可用尺码。围差到罩杯的字母转换取决于地区:
- 欧盟使用的围差间隔为 2 cm,即围差 ≥ 2 cm 为 A、≥ 4 cm 为 B,以此类推。
- 中国、美国使用的围差间隔为 2.5 cm,即围差 ≥ 2.5 cm 为 A、≥ 5 cm 为 B,以此类推。
- 较大围差者会遇到[不规律的尺寸标号(DD、DDD等)](https://en.wikipedia.org/w/index.php?title=Bra_size&oldid=1181336261#The_meaning_of_cup_sizes_varies),此计算器不做处理。

- 下胸围 + 11cm + n × 2cm = 胸围
你的罩杯字母是不是有点大?这太正常了!
* 罩杯应该描述的就是围差,不是体积。也许你的奶子应该坐在杯里,现在的衣服只是把它们压到腋下去了。脱去衣物就是为了避免现有胸罩的干扰!
* 和[正确大小](https://www.reddit.com/r/ABraThatFits/wiki/beginners_guide/#wiki_believe_your_size)比较一下,是不是差不多?
* 网络上有将 11 cm 或四英寸围差挪进下胸围的做法,但这种做法会导致杯过小,见[White & Scurr 2012](https://sci-hub.se/https://www.tandfonline.com/doi/abs/10.1080/00140139.2011.647096)。Kohl、奶糖派等成熟厂商的计算器已抛弃该算法。

- 罩杯 n = (胸围 - 下胸围 - 5) / 2.5
算法来源:
* r/ABraThatFits [通用算法](https://www.reddit.com/r/ABraThatFits/wiki/manual_sizing_guide/)、[MTF 指南](https://www.reddit.com/r/ABraThatFits/wiki/mtfguide/)。
* r/ABraThatFits 有[在线计算器](https://www.abrathatfits.org/calculator.php),但是非开源、需要向后端提交数据,请慎用。此计算器的输出已用于参考。“EU”输出为 5 cm 底围间隔、2.5 cm 围差间隔,有 10 cm 调整。
* [奶糖派尺码助手](https://sizehelp.naitangpai.com/h5pc/pc.html),非开源、需要向后端提交数据,请慎用。输出为 5 cm 底围间隔、约 2.5 cm 围差间隔,无 10 cm 调整。

数字 n 代表罩杯 (A=1、B=2、C=3依此类推)。例如,胸围和下胸围差为10 cm (n=2)表示B罩杯。
<script type="text/javascript">
function stringify_cup(n) {
var cup_to_letter = ["AA,买少女小背心去吧", "A", "B", "C", "D", "E", "F", "G"];
if (isNaN(n))
return "数值错误,再检查检查吧";
if (n < 0)
return "小妹妹你还不需要穿内衣哦";
if (n > cup_to_letter.length)
return "你胸大你说了算(罩杯超出 MtF.wiki 预设)";
return cup_to_letter[n];
}
function cup() {
var $id = window.document.getElementById.bind(window.document);

// Calculate
var und_l = Number($id("und-loose").value) || NaN;
var und_s = Number($id("und-snug").value) || NaN;
var und_t = Number($id("und-tight").value) || NaN;
var up_u = Number($id("up-up").value) || NaN;
var up_l = Number($id("up-lean").value) || NaN;
var up_d = Number($id("up-down").value) || NaN;

<button onclick="cup()" type="submit">提交</button>
// EU, CN use 5 cm bands
var under = Math.round(und_s / 5) * 5;
var upper = (up_u * 2 + up_l + up_d * 2) / 5;
var diff = upper - und_l + (und_l - under) / 2;

<p id="result">国际通用罩杯: </p>
<p id="resultcn">中国尺码: </p>
var cup_eu = Math.floor(diff / 2);
var cup_cn = Math.floor(diff / 2.5);

<script type="text/javascript">
function cup() {
//Initial
window.document.getElementById("result").innerHTML = "国际通用罩杯: ";
window.document.getElementById("resultcn").innerHTML = "国内罩杯: ";
//Calculate
var val1 = Number(window.document.getElementById("val1").value) || NaN;
var val2 = Number(window.document.getElementById("val2").value) || NaN;
var val3 = Number(window.document.getElementById("val3").value) || NaN;
var val4 = Number(window.document.getElementById("val4").value) || NaN;
var val5 = Number(window.document.getElementById("val5").value) || NaN;
var under = (val1 + val2 )/2;
var upper = (val3 + val4 + val5)/3;
var cup = ( upper - under - 11 ) / 2;
var cupcn = upper - under;
var valid = true;
//Judgement
if (isNaN(cup)) {
window.document.getElementById("result").innerHTML = "数值错误,再检查检查吧";
valid = false;
} else if (cup<=0){
window.document.getElementById("result").innerHTML += "小妹妹你还不需要穿内衣哦";
valid = false;
} else if (cup<1){
cup = "AA,买少女小背心去吧";
} else if (cup<=2){
cup = "A";
} else if (cup<3){
cup = "B";
} else if (cup<4){
cup = "C";
} else if (cup<5){
cup = "D";
} else if (cup<6){
cup = "E";
}else{
window.document.getElementById("result").innerHTML += "你胸大你说了算(罩杯超出 MtF.wiki 预设)";
valid = false;
}
if (isNaN(cupcn)) {
window.document.getElementById("resultcn").innerHTML = "数值错误,再检查检查吧";
valid = false;
} else if (cupcn <= 5) {
window.document.getElementById("resultcn").innerHTML += "小妹妹你还不需要穿内衣哦";
valid = false;
} else if (cupcn <= 7.5) {
cupcn = "AA,买少女小背心去吧";
} else if (cupcn <= 10) {
cupcn = "A";
} else if (cupcn <= 12.5) {
cupcn = "B";
} else if (cupcn <= 15) {
cupcn = "C";
} else if (cupcn <= 17.5) {
cupcn = "D";
} else if (cupcn <= 20) {
cupcn = "E";
} else {
window.document.getElementById("resultcn").innerHTML += "你胸大你说了算(罩杯超出 MtF.wiki 预设)";
valid = false;
}
if (!valid)
return;
if (isNaN(under)) {
window.document.getElementById("result").innerHTML = "数值错误,再检查检查吧";
window.document.getElementById("resultcn").innerHTML = "数值错误,再检查检查吧";
return;
} else{
under = Math.ceil(under/5)*5;
}
window.document.getElementById("result").innerHTML += under + cup;
window.document.getElementById("resultcn").innerHTML += under + cupcn;
return;
$id("diff").innerText = under + ", " + diff.toFixed(2);
if (isNaN(diff)) {
$id("diff").innerText = "数值错误,再检查检查吧";
}

// EU performs -10 adjustment, see https://www.reddit.com/r/ABraThatFits/wiki/sizing_systems/
// CN Candy Pie does not do the same
$id("eu").innerText = '' + (under - 10) + stringify_cup(cup_eu);
$id("cn").innerText = '' + (under) + stringify_cup(cup_cn);
}

</script>