একটি হাইপারবোলিক প্লেন টেসেল্লেশন প্লট করুন


10

হাইপারবোলিক প্লেনে টেসলেশনের প্লট (পয়েন্ট কেয়ার ডিস্ক) তৈরি করুন, যেমন:

এখানে চিত্র বর্ণনা লিখুন

প্রোগ্রামটি চারটি ইনপুট গ্রহণ করে:

1) কয়টি প্রান্ত / বহুভুজ (এই উদাহরণে তিনটি)।

2) প্রতিটি শীর্ষবিন্দুতে কতগুলি ছেদ করে (এই উদাহরণে সাতটি)।

3) রেন্ডার করতে কেন্দ্রের শীর্ষস্থান থেকে কত পদক্ষেপ দূরে (এই উদাহরণে 5 টি, যদি আপনি নিবিড়ভাবে দেখেন)। এর অর্থ হ'ল যদি একটি ভার্টেক্স অন্তর্ভুক্ত থাকে তবে যদি এটি 5 বা তার কম পদক্ষেপে পৌঁছতে পারে তবে এটি কেন্দ্র গঠন করবে। উভয় প্রান্তকে অন্তর্ভুক্ত করা হলে প্রান্তগুলি রেন্ডার করা হয়।

4) চিত্রটির রেজোলিউশন (একক সংখ্যা পিক্সেল, চিত্রটি বর্গক্ষেত্র)।

আউটপুট অবশ্যই একটি চিত্র হতে হবে। প্রান্তগুলি অবশ্যই বৃত্ত-আর্ক হিসাবে রেন্ডার করা উচিত, লাইন নয় (পয়েন্টকারি ডিস্ক প্রক্ষেপণগুলি বৃত্তগুলিতে রেখাকে রূপান্তর করে)। পয়েন্টগুলি রেন্ডার করার দরকার নেই। যখন ব্যবহারকারী এমন কোনও কিছু রাখেন যা হাইপারবোলিক নয় (অর্থাত্ প্রতিটি শীর্ষে 5 টি ত্রিভুজ সভা করে), প্রোগ্রামটি সঠিকভাবে কাজ করতে হবে না। এটি কোড-গল্ফ, তাই সংক্ষিপ্ত উত্তরটি জেতে।


আরও পরিষ্কার করা হয়েছে।
কেভিন কোস্টলান

এখন অনেক বেশি পরিষ্কার হয় :)
ট্রাইকোপল্যাক্স

এটি অন্তর্নিহিত, তবে এটি স্পষ্ট করে বলা আরও ভাল যে ক) পয়েন্টার ডিস্ক মডেলটি ব্যবহার করা উচিত (যদি না আপনি অর্ধ-বিমানের মডেলের উত্তরগুলিও খোলা না থাকেন); খ) একটি বহুভুজের কেন্দ্রে নয়, একটি ডিস্কের কেন্দ্রে একটি ভার্টেক্স রেন্ডার করা উচিত।
পিটার টেলর

ডিস্কের কেন্দ্রে একটি ভার্টেক্স শুয়ে থাকতে হবে? অথবা ডিস্কের কেন্দ্র একটি বহুভুজের কেন্দ্র হতে পারে?
ডেভিডসি

1
এটিতে আরও পটভূমির তথ্য প্রয়োজন। আমি বেশ কয়েকটি সাইট দেখেছি (প্রশ্নের মধ্যে কোনটিই উল্লেখ করা হয়নি) এবং উদাহরণের চিত্র অঙ্কনের জন্য সঠিক স্পেসিফিকেশনটি আমি খুঁজে বের করতে পারি না, সাধারণ ক্ষেত্রে ছেড়ে দেওয়া যাক। যদি এটি নির্দিষ্ট না করা থাকে তবে আপনি অবৈধ উত্তর পেতে পারেন যে লোকেরা কঠোর পরিশ্রম করেছে (উদাহরণস্বরূপ আমি বুঝতে পেরেছি যে রেডিয়াল লাইনগুলি বৃত্তগুলির আর্ক হিসাবে প্রতিনিধিত্ব করা হয়, তবে কেউ শর্টকাট নিতে পারে এবং সোজা লাইনগুলি করতে পারে)) এছাড়াও, মনে হয় কেন্দ্রের ভার্টেক্স (বৃত্ত ব্যাসার্ধের শতাংশ হিসাবে) থেকে রেখার প্রান্ত দৈর্ঘ্য নির্দিষ্ট করা দরকার।
স্তর নদী

উত্তর:


2

গণিত, 2535 বাইট

এখান থেকে নেওয়া হয়েছে (সুতরাং এটি সম্প্রদায়ের উইকি কেন)। সত্যিই যে গল্ফ হয় না। লেখককে তার কোড ব্যাখ্যা করার জন্য প্রদত্ত লিঙ্কটি দেখুন।

এছাড়াও, আমি কোনও গণিত বিশেষজ্ঞ নই, তবে মার্টিন কোড দৈর্ঘ্যে বিস্ময়কর কাজ করতে পারেন বলে আমি বাজি ধরেছি। আমি এর পিছনে গণিতও বুঝতে পারি না।

আমি এটিকে পাঠ্যযোগ্য রেখেছি, তবে যদি প্রশ্নটি বন্ধ না হয়, তবে আমি এটিকে পঠনযোগ্যতার অতীততে গল্ফ করব এবং কলার ফাংশনের ভিতরে 2 অন্যান্য পরামিতিগুলি স্থানান্তর করব।

বর্তমানে অবৈধ , এটিকে উন্নত করতে সাহায্য করতে নির্দ্বিধায়:

  • আমি মনে করি এটি আর্কের চেয়ে লাইন ব্যবহার করে।

  • একটি মুখোমুখি না হয়ে একটি ভার্টেক্সের চেয়ে কেন্দ্রীভূত।

HyperbolicLine[{{Px_, Py_}, {Qx_, Qy_}}] := 
 If[N[Chop[Px Qy - Py Qx]] =!= 0., 
  Circle[OrthoCentre[{{Px, Py}, {Qx, Qy}}], 
   OrthoRadius[{{Px, Py}, {Qx, Qy}}], 
   OrthoAngles[{{Px, Py}, {Qx, Qy}}]], Line[{{Px, Py}, {Qx, Qy}}]]

OrthoCentre[{{Px_, Py_}, {Qx_, Qy_}}] := 
 With[{d = 2 Px Qy - 2 Py Qx, p = 1 + Px^2, q = 1 + Qx^2 + Qy^2}, 
  If[N[d] =!= 0., {p Qy + Py^2 Qy - Py q, -p Qx - Py^2 Qx + Px q}/d, 
   ComplexInfinity]]

OrthoRadius[{{Px_, Py_}, {Qx_, Qy_}}] := 
 If[N[Chop[Px Qy - Py Qx]] =!= 0., 
  Sqrt[Total[OrthoCentre[{{Px, Py}, {Qx, Qy}}]^2] - 1], Infinity]

OrthoAngles[{{Px_, Py_}, {Qx_, Qy_}}] := 
 Block[{a, b, c = OrthoCentre[{{Px, Py}, {Qx, Qy}}]}, 
  If[(a = N[Apply[ArcTan, {Px, Py} - c]]) < 0., a = a + 2 \[Pi]];
  If[(b = N[Apply[ArcTan, {Qx, Qy} - c]]) < 0., 
   b = b + 2 \[Pi]]; {a, b} = Sort[{a, b}];
  If[b - a > \[Pi], {b, a + 2 \[Pi]}, {a, b}]]

Inversion[Circle[{Cx_, Cy_}, r_], {Px_, Py_}] := {Cx, Cy} + 
  r^2 {Px - Cx, Py - Cy}/((Cx - Px)^2 + (Cy - Py)^2)
Inversion[Circle[{Cx_, Cy_}, r_, {a_, b_}], {Px_, Py_}] := {Cx, Cy} + 
  r^2 {Px - Cx, Py - Cy}/((Cx - Px)^2 + (Cy - Py)^2)

Inversion[Circle[{Cx_, Cy_}, r_, {a_, b_}], p_Line] := 
 Map[Inversion[Circle[{Cx, Cy}, r], #] &, p, {2}]

Inversion[Circle[{Cx_, Cy_}, r_, {a_, b_}], p_Polygon] := 
 Map[Inversion[Circle[{Cx, Cy}, r], #] &, p, {2}]

Inversion[Line[{{Px_, Py_}, {Qx_, Qy_}}], {Ux_, Uy_}] := 
 With[{u = Px - Qx, 
   v = Qy - Py}, {-Ux (v^2 - u^2) - 2 u v Uy, 
    Uy (v^2 - u^2) - 2 u v Ux}/(u^2 + v^2)]
Inversion[Line[{{Px_, Py_}, {Qx_, Qy_}}], p_Polygon] := 
 Map[Inversion[Line[{{Px, Py}, {Qx, Qy}}], #] &, p, {2}]

Inversion[Circle[{Cx_, Cy_}, r_], c_List] := 
 Map[Inversion[Circle[{Cx, Cy}, r], #] &, c]


PolygonInvert[p_Polygon] := 
 Map[Inversion[HyperbolicLine[#], p] &, 
  Partition[Join[p[[1]], {p[[1, 1]]}], 2, 1]]
PolygonInvert[p_List] := Flatten[Map[PolygonInvert[#] &, p]]

LineRule = Polygon[x_] :> Line[Join[x, {x[[1]]}]];
HyperbolicLineRule = 
  Polygon[x_] :> 
   Map[HyperbolicLine, Partition[Join[x, {x[[1]]}], 2, 1]];

CentralPolygon[p_Integer, q_Integer, \[Phi]_: 0] := 
 With[{r = (Cot[\[Pi]/p] Cot[\[Pi]/q] - 1)/
     Sqrt[Cot[\[Pi]/p]^2 Cot[\[Pi]/q]^2 - 1], \[Theta] = \[Pi] Range[
       1, 2 p - 1, 2]/p}, 
  r Map[{{Cos[\[Phi]], -Sin[\[Phi]]}, {Sin[\[Phi]], Cos[\[Phi]]}}.# &,
     Transpose[{Cos[\[Theta]], Sin[\[Theta]]}]]]

PolygonUnion[p_Polygon, tol_: 10.^-10] := p
PolygonUnion[p_List, tol_: 10.^-10] := 
 With[{q = p /. Polygon[x_] :> N[Polygon[Round[x, 10.^-10]]]}, 
  DeleteDuplicates[q]]
HyperbolicTessellation[p_Integer, q_Integer, \[Phi]_, k_Integer, 
  t_: 10.^-10] := 
 Map[PolygonUnion[#, t] &, 
   NestList[PolygonInvert, Polygon[CentralPolygon[p, q, \[Phi]]], 
     k][[{-2, -1}]]] /; k > 0

HyperbolicTessellation[p_Integer, q_Integer, \[Phi]_, k_Integer, 
  t_: 10.^-10] := Polygon[CentralPolygon[p, q, \[Phi]]] /; k == 0
HyperbolicTessellationGraphics[p_Integer, q_Integer, \[Phi]_, 
  k_Integer, rule_RuleDelayed, opts___] := 
 Graphics[{Circle[{0, 0}, 1], 
   HyperbolicTessellation[p, q, \[Phi], k, 10.^-10] /. rule}, opts]

যেমন বলা হয়:

HyperbolicTessellationGraphics[3, 7, 0., 7, HyperbolicLineRule, ImageSize -> 300, PlotLabel -> "{7,7}"]

টালি দ্বারা আচ্ছাদন


1
এটি পাঠ্যের চূড়ান্ত প্রাচীরের মতো দেখাচ্ছে। +1
kirbyfan64sos 21

@ kirbyfan64sos হ্যাঁ, এটি একটি জন্তুটি বোঝা। আমি নিশ্চিত যে হাইপারবোলিক লাইনের পরিবর্তে আরকেস তৈরি করতে প্রয়োজনীয় কয়েকটি পরিবর্তন প্রয়োজন। এছাড়াও, ফাংশন / প্যারামিটারগুলি সিঙ্গল-চর নামে পরিবর্তন করলে আকারটি অনেকটা কমে যাবে।
mbomb007

1
@ স্টেভেরিলিল এটি আরকেসের পরিবর্তে লাইনও বটে, এটিও ভুল। সমস্যা নিশ্চিত করতে কীভাবে এটি পরিবর্তন করতে হবে তা আমি নিশ্চিত নই। এটি সিডব্লিউ, সুতরাং যে কেউ এটিকে উন্নত করতে সাহায্য করতে নির্দ্বিধায় পারেন।
mbomb007

1
আমি ভাবছিলাম এটি লাইন বা আরাকস ছিল কিনা। এই নিম্ন রেজোলিউশনে এটি বলা শক্ত, তবে তারা আসলে খুব বেশি ... আরসি নয়, সম্ভবত আরক হতে পারে। উদাহরণস্বরূপ, দেখে মনে হচ্ছে কেন্দ্রীয় বহুভুজের ডানদিকে লাইনটি কিছুটা ভিতরে বাঁকানো।
রেটো কোরাডি

1
অন্য ব্যক্তির কোডের উপর ভিত্তি করে আমার আরেকটি পদ্ধতি রয়েছে যা আমি ১১০০ বাইটে নামতে সক্ষম হয়েছি। কিন্তু, একবার গল্ফড হয়ে গেলে কোডটি অনিবার্য হয়ে ওঠে। আমি বিশ্বাস করি যদি আমরা আপনার জমাটি গল্ফ করি তবে এটি ঘটবে। এই মুহুর্তে, আমি কীভাবে ভার্বোস ফর্ম্যাটে কাজ করে তা বোঝার চেষ্টা করছি।
ডেভিডসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.