{"id":2082,"date":"2025-05-04T07:33:27","date_gmt":"2025-05-04T07:33:27","guid":{"rendered":"https:\/\/techtrendfeed.com\/?p=2082"},"modified":"2025-05-04T07:33:27","modified_gmt":"2025-05-04T07:33:27","slug":"constructing-tmt-mirror-visualization-with-llm-a-step-by-step-journey","status":"publish","type":"post","link":"https:\/\/techtrendfeed.com\/?p=2082","title":{"rendered":"Constructing TMT Mirror Visualization with LLM: A Step-by-Step Journey"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p>Making a consumer interface that visualizes a real-world construction \u2014 just like the Thirty Meter Telescope&#8217;s mirror \u2014 would possibly look like a process that calls for deep information of geometry, D3.js, and SVG graphics. However with a Massive Language Mannequin (LLM) like Claude or ChatGPT, you needn&#8217;t know all the pieces upfront.<\/p>\n<p>This text paperwork a journey in constructing a posh, interactive UI with no prior expertise in D3.js or UI growth usually.<br \/>\n    The work was achieved as a part of constructing a prototype for an operational consumer interface for the telescope&#8217;s major mirror, designed to point out real-time standing of mirror segments.<br \/>\n    It highlights how LLMs allow you to \u201cget on with it\u201d, supplying you with a working prototype<br \/>\n    even while you&#8217;re unfamiliar with the underlying tech.<br \/>\n    Extra importantly, it reveals how iterative prompting \u2014 refining your requests step-by-step \u2014<br \/>\n    leads not solely to the suitable code but additionally to a clearer understanding<br \/>\n    of what you are attempting to construct.\n    <\/p>\n<section id=\"TheGoal\">\n<h2>The Purpose<\/h2>\n<p>We wished to create an HTML-based visualization of the Thirty Meter Telescope&#8217;s major mirror, composed of 492 hexagonal segments organized symmetrically in a round sample.<\/p>\n<p>We started with a high-level immediate that described the construction, however quickly realized that to succeed in my objective, I might must information the AI step-by-step.<\/p>\n<\/section>\n<section id=\"Step1TheInitialPrompt\">\n<h2>Step 1: The Preliminary Immediate<\/h2>\n<div class=\"prompt\">\n<p>\u201cI need to create an HTML view of the Thirty Meter Telescope&#8217;s honeycomb mirror.<br \/>\n        Attempt to generate an HTML and CSS primarily based UI for this mirror, which consists of 492 hexagonal segments organized in a round sample.<br \/>\n        General construction is of a honeycomb. The construction needs to be symmetric.<br \/>\n        For instance the variety of hexagons within the first row needs to be similar within the final row.<br \/>\n        The variety of hexagons within the second row needs to be similar because the one within the second final row, and many others.\u201d<\/p>\n<\/div>\n<p>Claude gave it a shot \u2014 however the consequence wasn&#8217;t what I had in thoughts. The format was blocky and never fairly symmetric. That is after I determined to take a step-by-step strategy.<\/p>\n<div class=\"figure \" id=\"https:\/\/martinfowler.com\/articles\/exploring-gen-ai\/step1-initial-attempt.png\"><img decoding=\"async\" alt=\"Initial attempt showing blocky, non-symmetric layout\" src=\"https:\/\/martinfowler.com\/articles\/exploring-gen-ai\/step1-initial-attempt.png\" style=\"max-width: 95vw;\" width=\"325\" \/><\/p>\n<\/div>\n<\/section>\n<section id=\"Step2DrawingOneHexagon\">\n<h2>Step 2: Drawing One Hexagon<\/h2>\n<div class=\"prompt\">\n<p>\u201cThis isn&#8217;t what I need&#8230; Let&#8217;s do it step-by-step.\u201d<\/p>\n<p>\u201cLet&#8217;s draw one hexagon with flat edge vertical. The hexagon ought to have all sides of similar size.\u201d<\/p>\n<p>\u201cLet&#8217;s use d3.js and draw svg.\u201d<\/p>\n<p>\u201cLet&#8217;s draw just one hexagon with d3.\u201d<\/p>\n<\/div>\n<p>Claude generated clear D3 code to attract a single hexagon with the right orientation and geometry. It labored \u2014 and gave me confidence within the constructing blocks.<\/p>\n<p>Lesson: Begin small. Affirm the muse works earlier than scaling complexity.<\/p>\n<div class=\"figure \" id=\"https:\/\/martinfowler.com\/articles\/exploring-gen-ai\/step2-single-hexagon.png\"><img decoding=\"async\" alt=\"Single hexagon with flat edge vertical\" src=\"https:\/\/martinfowler.com\/articles\/exploring-gen-ai\/step2-single-hexagon.png\" style=\"max-width: 95vw;\" width=\"325\" \/><\/p>\n<\/div>\n<\/section>\n<section id=\"Step3AddingASecondHexagon\">\n<h2>Step 3: Including a Second Hexagon<\/h2>\n<div class=\"prompt\">\n<p>\u201cGood&#8230; Now let&#8217;s add yet one more hexagon subsequent to this one. It ought to share vertical edge with the primary hexagon.\u201d<\/p>\n<\/div>\n<p>Claude adjusted the coordinates, putting the second hexagon adjoining to the primary by aligning their vertical edges. The format logic was starting to emerge.<\/p>\n<div class=\"figure \" id=\"https:\/\/martinfowler.com\/articles\/exploring-gen-ai\/step3-two-hexagons.png\"><img decoding=\"async\" alt=\"Two hexagons sharing a vertical edge\" src=\"https:\/\/martinfowler.com\/articles\/exploring-gen-ai\/step3-two-hexagons.png\" style=\"max-width: 95vw;\" width=\"325\" \/><\/p>\n<\/div>\n<\/section>\n<section id=\"Step4CreatingTheSecondRow\">\n<h2>Step 4: Creating the Second Row<\/h2>\n<div class=\"prompt\">\n<p>\u201cNow let&#8217;s add yet one more row.<\/p>\n<p>The hexagons within the second row share vertical edges with one another much like the primary row.<\/p>\n<p>The highest slanting edges of the hexagons within the second row needs to be shared with the underside slanting edges of the hexagons within the first row.<\/p>\n<p>The variety of hexagons within the second row needs to be such that the primary row seems centrally positioned with the second row.\u201d<\/p>\n<\/div>\n<p>Preliminary makes an attempt did not correctly align the slanting edges.<\/p>\n<p>\n        \u201cOops&#8230; this doesn&#8217;t share the slanting edges with the earlier row.\u201d\n      <\/p>\n<div class=\"figure \" id=\"https:\/\/martinfowler.com\/articles\/exploring-gen-ai\/step4-two-rows.png\"><img decoding=\"async\" alt=\"Two rows of hexagons\" src=\"https:\/\/martinfowler.com\/articles\/exploring-gen-ai\/step4-two-rows.png\" style=\"max-width: 95vw;\" width=\"325\" \/><\/p>\n<\/div>\n<p>However ultimately, after clarifying spacing and offset logic, Claude obtained it proper.<\/p>\n<div class=\"figure \" id=\"https:\/\/martinfowler.com\/articles\/exploring-gen-ai\/step4-two-rows_fixed.png\"><img decoding=\"async\" alt=\"Two rows of hexagons with proper edge alignment\" src=\"https:\/\/martinfowler.com\/articles\/exploring-gen-ai\/step4-two-rows_fixed.png\" style=\"max-width: 95vw;\" width=\"325\" \/><\/p>\n<\/div>\n<p>Lesson: Geometry-based layouts typically require a number of iterations with cautious visible inspection.<\/p>\n<\/section>\n<section id=\"Step5ExpandingIntoASymmetricStructure\">\n<h2>Step 5: Increasing right into a Symmetric Construction<\/h2>\n<p>\n        \u201cNow we have to create greater construction with extra hexagons organized in additional rows such that:<br \/>\n          The general construction seems round like honeycomb.<br \/>\n          The variety of hexagons within the rows goes on growing after which goes on reducing to type a superbly symmetric construction.<br \/>\n          The overall variety of hexagons must be 492 to match the TMT telescope.<br \/>\n          We will have an empty hexagon (displaying empty house) precisely on the heart of the circle.\u201d\n      <\/p>\n<p>Claude used a ring-based format strategy to simulate round symmetry. However at first:<\/p>\n<p>\n        \u201cThis isn&#8217;t round however seems to be extra like a hexagonal general view&#8230;\u201d\n      <\/p>\n<p>Then I advised:<\/p>\n<p>\u201cAttempt with solely 6 hexagons within the first and final row.\u201d<\/p>\n<p>This transformation improved symmetry and helped obtain a visually round format. The variety of hexagons per row elevated after which decreased \u2014 precisely as desired.<\/p>\n<\/section>\n<section id=\"Step6TuningTheCentralOpening\">\n<h2>Step 6: Tuning the Central Opening<\/h2>\n<p>\n        \u201cThat is higher however we want a smaller opening on the heart.The black house on the heart is simply too large. It needs to be at most 1 or just a few hexagons.\u201d\n      <\/p>\n<p>By decreasing the empty house and rebalancing the internal rings, we lastly obtained a well-packed, round construction with a small central hole \u2014 matching the TMT design.<\/p>\n<p>Lesson: Use domain-specific constraints (like whole depend = 492) as guideposts for format parameters.<\/p>\n<\/section>\n<section id=\"Step7AddingNumberingAndTooltips\">\n<h2>Step 7: Including Numbering and Tooltips<\/h2>\n<p>\n        \u201cWe need to have a quantity on every hexagonal section. They need to be numbered sequentially. The primary within the first row needs to be 1 and the final within the final row needs to be 492. Once we present the hexagonal section info on mouseover, we must always present the quantity as effectively.\u201d\n      <\/p>\n<p>Claude initially assigned numbers primarily based on ring index, not row order.<\/p>\n<p>\u201cYou&#8217;re producing numbers primarily based on place within the ring&#8230; However the numbering needs to be row-based. So we must always one way or the other map the rings to the row. For instance, Ring 13 section quantity 483 is in row 1 and needs to be numbered 1, and many others. Are you able to counsel a solution to map segments from rings to rows this fashion?\u201d<\/p>\n<p>As soon as this mapping was carried out, all the pieces fell into place:<\/p>\n<ul>\n<li>A round format of 492 numbered segments<\/li>\n<li>A small central hole<\/li>\n<li>Tooltips displaying section metadata<\/li>\n<li>Visible symmetry from outer to internal rings<\/li>\n<\/ul>\n<div class=\"figure \" id=\"https:\/\/martinfowler.com\/articles\/exploring-gen-ai\/step7-numbered-segments.png\"><img decoding=\"async\" alt=\"Final structure with numbered segments and tooltips\" src=\"https:\/\/martinfowler.com\/articles\/exploring-gen-ai\/step7-numbered-segments.png\" style=\"max-width: 95vw;\" width=\"325\" \/><\/p>\n<\/div>\n<\/section>\n<section id=\"Reflections\">\n<h2>Reflections<\/h2>\n<p>This expertise taught me a number of key classes:<\/p>\n<ol>\n<li><b>LLMs allow you to get on with it<\/b>: Even with zero information of D3.js or SVG geometry, I may begin constructing instantly. The AI scaffolded the coding, and I discovered by the method.<\/li>\n<li><b>Prompting is iterative<\/b>: My first immediate wasn&#8217;t incorrect \u2014 it simply wasn&#8217;t particular sufficient. By reviewing the output at every step, clarified what I actually wished and refined my asks accordingly.<\/li>\n<li><b>LLMs unlock studying by constructing<\/b>: In the long run, I did not simply get a working UI. I obtained an comprehensible codebase and a hands-on entry level into a brand new know-how. Constructing first and studying from it.<\/li>\n<\/ol>\n<\/section>\n<section id=\"Conclusion\">\n<h2>Conclusion<\/h2>\n<p>What began as a imprecise design thought was a functioning, symmetric, interactive visualization of the Thirty Meter Telescope&#8217;s mirror \u2014 constructed collaboratively with an LLM.<\/p>\n<p>This expertise reaffirmed that prompt-driven growth is not nearly producing code \u2014 it is about pondering by design, clarifying intent, and constructing your means into understanding.<\/p>\n<p>In case you&#8217;ve ever wished to discover a brand new know-how, construct a UI, or sort out a domain-specific visualization \u2014 do not wait to be taught all of it first.<\/p>\n<p>Begin constructing with an LLM. You may be taught alongside the way in which.<\/p>\n<\/section>\n<hr class=\"bodySep\" \/>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Making a consumer interface that visualizes a real-world construction \u2014 just like the Thirty Meter Telescope&#8217;s mirror \u2014 would possibly look like a process that calls for deep information of geometry, D3.js, and SVG graphics. However with a Massive Language Mannequin (LLM) like Claude or ChatGPT, you needn&#8217;t know all the pieces upfront. This text [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2084,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56],"tags":[475,2055,74,2053,77,2052,2054],"class_list":["post-2082","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software","tag-building","tag-journey","tag-llm","tag-mirror","tag-stepbystep","tag-tmt","tag-visualization"],"_links":{"self":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/2082","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2082"}],"version-history":[{"count":1,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/2082\/revisions"}],"predecessor-version":[{"id":2083,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/posts\/2082\/revisions\/2083"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=\/wp\/v2\/media\/2084"}],"wp:attachment":[{"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2082"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2082"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techtrendfeed.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2082"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<!-- This website is optimized by Airlift. Learn more: https://airlift.net. Template:. Learn more: https://airlift.net. Template: 69d9690a190636c2e0989534. Config Timestamp: 2026-04-10 21:18:02 UTC, Cached Timestamp: 2026-06-13 15:24:08 UTC -->