{% extends 'default_frame.twig' %}
{% block main %}
<link rel="stylesheet" href="/css/ngc_sm.css" media="screen and (max-width:640px)" />
<link rel="stylesheet" href="/css/ngc_pc.css" media="screen and (min-width:641px)" />
<div class="kasowarap">
<div class="kaso_h1title">
<p>NGC Appraisal</p>
<h1>NGC鑑定</h1>
</div>
<div class="nav_menu"><div class="nav_menu_wrap">
<ul>
<li>
<a href="/user_data/ngc"><p>鑑定代行と流れ</p></a>
</li>
<li class="on">
<a href="/user_data/ngchold"><p>NGC<br class="sm">スラブケース</p></a>
</li>
<li>
<a href="/user_data/ngcgrading"><p>グレーディング</p></a>
</li>
<li>
<a href="/user_data/ngc70"><p>70グレード表</p></a>
</li>
</ul>
</div></div> <!-- nav_menu -->
<div class="main_banner">
<p>NGCスラブケース<br><span>NGC Holders</span></p>
<style>
.main_banner {
background: center center / auto 100% url(/img/ngc_case.jpg) no-repeat;
}
</style>
</div> <!-- main_banner -->
<div class="infor">
<div class="infor_wrap">
<ul class="th_1">
<li><img src="/img/ngc_case_info.webp" alt=""></li>
<li>
<h4>コイン鑑定と格付けの分野で世界最高峰の評価を得る認証機関</h4>
<p>
NGCは業界の標準を築く存在として、厳密な基準と公正な評価を提供し、これまでに累計5000万点以上のコインを鑑定してきました。歴史的価値から市場での取引適正まで、多角的な視点での鑑定は、収集家や投資家から絶大な信頼を得ています。<br>
NGCの鑑定済みコインは、世界中のオークション市場で公式な価値基準とされ、その透明性と専門性は揺るぎないものです。コインの真価を見極め、未来の資産価値を確かなものにするために、グローバルスタンダードであるNGCの鑑定サービスをご利用ください。
</p>
</li>
</ul>
<ul class="th_2">
<li><img src="/img/ngc_case_holder.webp" alt=""></li>
<li>
<h4>業界最先端の保護ケース「NGCスラブケース」</h4>
<p>
NGCは、世界トップクラスのコイン鑑定機関として、コイン、トークン、メダルの長期保存と安全な展示を実現しています。研究開発には100万ドル以上を投じ、世界的な評価を受けるその技術は、スミソニアン博物館をはじめとする著名な美術館・博物館でも採用されています。
</p>
<p>
NGCスラブケースは、高品質な不活性素材を使用し、保護性能と視認性に優れた設計が特徴です。複数のセキュリティ機能が組み込まれ、コレクターやディーラーにとって不可欠な存在です。
</p>
<p>
NGCスラブケースは、美しさと安全性の両立を目指すコレクターにとって、最適なソリューションを提供します。市場での価値保存と展示の新しい基準として、信頼と評価を得ています。
</p>
</li>
</ul>
<ul class="chart">
<li>
<h4>世界最大規模の鑑定実績</h4>
<p>
NGC has graded more than<br>
<b>60,000,000 coins</b><br>
from virtually every past and present country
</p>
<p>
世界中のコイン鑑定業界において圧倒的な存在感を誇り、これまでに6,000万点以上のコインを鑑定してきました。過去から現在に至るまで、ほぼすべての国のコインを対象とし、その鑑定範囲は業界最大級です。この膨大な実績は、NGCの専門性と信頼性の高さを物語っています。
</p>
</li>
<li>
<div id="results__view"></div>
<!-- Include D3.js -->
<script src="https://d3js.org/d3.v7.min.js"></script>
<script>
"use strict";
console.log(document.getElementById("results__view"));
let width, height, radius, transformX, transformY;
if (window.innerWidth > 640) {
width = 700;
height = 300;
transformX = width / 2;
transformY = height / 2;
} else {
width = window.innerWidth * 0.95;
height = window.innerWidth * 1.2;
transformX = 0;
transformY = 0;
}
radius = Math.min(width, height) / 2;
let svg = d3
.select("#results__view")
.append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", `translate(${transformX}, ${transformY})`);
/* GROUP */
svg.append("g").attr("id", "slices");
svg.append("g").attr("id", "responses");
svg.append("g").attr("id", "lines");
svg.append("g").attr("id", "legend");
let arc = d3
.arc()
.innerRadius(radius * 0.38)
.outerRadius(radius * 0.72);
let outerArc = d3
.arc()
.innerRadius(radius * 0.8)
.outerRadius(radius * 0.8);
/* DATA */
let percent = [
{ rep: "南アメリカ", percent: 3.53 },
{ rep: "アジア", percent: 17.69 },
{ rep: "オーストラリア", percent: 2.63 },
{ rep: "アフリカ", percent: 3.91 },
{ rep: "ヨーロッパ", percent: 27.01 },
{ rep: "北アメリカ", percent: 45.23 }
];
let pie = d3.pie().value(d => d.percent).sort(null)(percent);
let colors = ["#e14956", "#fe912a", "#ffcd64", "#63d8be", "#34b2e4", "#07517e"];
let color = d3
.scaleOrdinal()
.domain(percent.map(d => d.rep))
.range(colors);
/* VIEW */
// Slices
let slices = svg
.select("#slices")
.selectAll(".slice")
.data(pie)
.enter()
.append("path")
.attr("fill", d => color(d.data.rep))
.attr("stroke", "#ffffff")
.attr("stroke-width", "2px")
.attr("d", arc({ startAngle: 0, endAngle: 0 }));
function animateSlices() {
return new Promise(resolve => {
slices
.transition()
.duration(1000)
.attrTween("d", function (d) {
this._current = this._current || { startAngle: 0, endAngle: 0 };
let interpolate = d3.interpolate(this._current, d);
this._current = interpolate(1);
return t => arc(interpolate(t));
})
.on("end", resolve);
});
}
// Lines
let lines = svg
.select("#lines")
.selectAll("polyline")
.data(pie)
.enter()
.append("polyline")
.style("fill", "none")
.style("stroke", "#a1a1a1")
.style("stroke-width", "1px")
.style("opacity", 0);
function animateLines() {
return new Promise(resolve => {
lines
.transition()
.duration(800)
.style("opacity", 1)
.attr("points", d => {
let pos = outerArc.centroid(d);
pos[0] = radius * 0.95 * (midAngle(d) < Math.PI ? 1 : -1);
return [arc.centroid(d), outerArc.centroid(d), pos];
})
.on("end", resolve);
});
}
// Responses
let resp = svg
.select("#responses")
.selectAll("text")
.data(pie)
.enter()
.append("text")
.attr("fill", "#1c1c1c")
.attr("dy", ".35em")
.style("font-size", ".9em")
.style("opacity", 0)
.attr("transform", `translate(0, 0)`);
resp
.append("tspan")
.style("font-weight", "700")
.text(d => d.data.rep);
resp
.append("tspan")
.style("font-weight", "400")
.text(d => ` - ${d.data.percent.toFixed(2)}%`)
.attr("dx", "5");
function animateReps() {
return new Promise(resolve => {
resp
.transition()
.duration(800)
.style("opacity", 1)
.attrTween("transform", function (d) {
let currentPos = this._current || { startAngle: 0, endAngle: 0 };
let interpolate = d3.interpolate(currentPos, d);
this._current = interpolate(1);
return function (t) {
let d2 = interpolate(t);
let pos = outerArc.centroid(d2);
pos[0] = radius * (midAngle(d2) < Math.PI ? 1 : -1);
return `translate(${pos})`;
};
})
.styleTween("text-anchor", function (d) {
let currentPos = this._current || { startAngle: 0, endAngle: 0 };
let interpolate = d3.interpolate(currentPos, d);
this._current = interpolate(1);
return function (t) {
let d2 = interpolate(t);
return midAngle(d2) < Math.PI ? "start" : "end";
};
})
.on("end", resolve);
});
}
// Legend
let legendItems = svg
.select("#legend")
.selectAll(".legend-item")
.data(percent)
.enter()
.append("g")
.attr("class", "legend-item")
.attr("transform", (d, i) => `translate(0, ${i * 24})`);
legendItems
.append("rect")
.attr("width", 18)
.attr("height", 18)
.style("fill", d => color(d.rep));
legendItems
.append("text")
.attr("x", 24)
.attr("y", 13)
.style("font-size", "12px")
.text(d => `${d.rep} - ${d.percent.toFixed(2)}%`);
function animateLegend() {
return new Promise(resolve => {
svg
.select("#legend")
.transition()
.duration(500)
.style("opacity", 1)
.on("end", resolve);
});
}
// Intersection Observer
const observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
observer.unobserve(entry.target);
animateSlices()
.then(animateLines)
.then(animateReps)
.then(animateLegend);
}
});
}, { threshold: 0.5 });
observer.observe(document.querySelector("#results__view"));
function midAngle(d) {
return d.startAngle + (d.endAngle - d.startAngle) / 2;
}
</script>
</li>
</ul>
</div>
</div>
</div><!--//kasowarap-->
{% endblock %}