তিনটি পয়েন্টের মাধ্যমে বৃত্ত


13

বিমানে তিনটি পয়েন্টের কার্তেসিয়ান স্থানাঙ্ক দেওয়া, তাদের সবার মধ্য দিয়ে বৃত্তের সমীকরণটি সন্ধান করুন। তিনটি পয়েন্ট সরলরেখায় থাকবে না।

আপনার প্রোগ্রামে প্রতিটি ইনপুট লাইন ক্রমে তিনটি পয়েন্টের সমন্বয় xএবং yসমন্বয় ধারণ করবে A(x),A(y),B(x),B(y),C(x),C(y)। এই সমন্বয়গুলি স্থানের দ্বারা একে অপরের থেকে পৃথক হওয়া 1,000,000 এর চেয়ে কম সংখ্যক আসল সংখ্যা হবে।

সমাধানটি ফর্মের সমীকরণ হিসাবে মুদ্রিত করতে হবে (x-h)^2 + (y-k)^2 = r^2। মান h, k, rদশমিক বিন্দু পর তিনটি সংখ্যা সঙ্গে ছাপা যেতে চলেছে। সংখ্যার আগে একাধিক চিহ্ন এড়ানোর জন্য প্রয়োজন মতো সমীকরণগুলিতে প্লাস এবং বিয়োগ চিহ্নগুলি পরিবর্তন করা উচিত।

Sample Inputs

7.0 -5.0 -1.0 1.0 0.0 -6.0
1.0 7.0 8.0 6.0 7.0 -2.0

Sample Outputs

(x - 3.000)^2 + (y + 2.000)^2 = 5.000^2
(x - 3.921)^2 + (y - 2.447)^2 = 5.409^2

আমরা কি এর পরিবর্তে পোলার বা প্যারামেট্রিক সমীকরণগুলি ব্যবহার করতে পারি?
পিটার ওলসন

@ পেটার নং এইভাবে অন্যান্য উত্তরের সাথে তুলনা করা কঠিন হবে।
fR0DDY

এক অনন্য সমাধান না হলে ক্ষেত্রে কী আউটপুট হওয়া উচিত? সংখ্যাগত দৃust়তাতে বাধা কী?
পিটার টেলর

@ পিটার-টেলর এটি সমস্যার বিবৃতিতে দেওয়া হয়েছে যে 'তিনটি পয়েন্ট সরলরেখায় থাকবে না।'
fR0DDY

2
মঞ্জুর, এটি কেবলমাত্র কয়েকটি চরিত্র তাই এটি কোনও ছদ্মবেশ নয় যে আমার সমাধানটি কয়েক খাটো হতে পারে, কেবলমাত্র একটি সৎ প্রশ্ন ... তবে যদি হোয়াইটস্পেসটি আউটপুট বৈশিষ্ট্যে থাকে তবে এটি বাধ্যতামূলক হওয়া উচিত নয়? অন্যথায়, একটি কোড-গল্ফে, কেন কেউ আউটপুট স্পিকার পূরণ করবে?
রেবেকা চেরনফ

উত্তর:


6

পাইথন, 176 টি অক্ষর

import sys,re
for s in sys.stdin:x,y,z=eval(re.sub(r'(\S+) (\S+)',r'\1+\2j,',s));w=z-x;w/=y-x;c=(x-y)*(w-abs(w)**2)/2j/w.imag-x;print'(x%+.3f)^2+(y%+.3f)^2=%.3f^2'%(c.real,c.imag,abs(c+x))

জটিল প্লেনে এটির সমস্ত কাজ করে। আমি এই পৃষ্ঠার নীচে থেকে গণিত যান । -cবৃত্তের কেন্দ্রস্থল।


@ জোয়ি: হ্যাঁ, আমার খারাপ। সংশোধন করা হয়েছে।
কিথ র্যান্ডাল

2

সি # - 490

using System;class C{static void Main(){Func<string,double>p=s=>double.Parse(s);Func<double,string>t=s=>(s<0?"+ ":"- ")+Math.Abs(s).ToString("F3");foreach(var l in System.IO.File.ReadAllLines("i")){var v=l.Split();double a=p(v[0]),b=p(v[1]),c=p(v[2]),d=p(v[3]),e=p(v[4]),f=p(v[5]),m=(d-b)/(c-a),n=(f-d)/(e-c),x=(m*n*(b-f)+n*(a+c)-m*(c+e))/(2*(n-m)),y=-(x-(a+c)/2)/m+(b+d)/2,r=Math.Sqrt((x-a)*(x-a)+(y-b)*(y-b));Console.WriteLine("(x "+t(x)+")^2+(y "+t(y)+")^2 = "+r.ToString("F3")+"^2");}}}

এটি এবি এবং বিসি-র মধ্যে 2 লাইন খুঁজে পেয়েছে। তারপরে এটি কোথায় পাওয়া যায় যে 2 টি লাইনের বাইসেক্ট ছেদ করে। (যা আমি কেবল লক্ষ্য করেছি @ পেটার টেলর @ পেটারঅফ দ্যকর্নকে তার মন্তব্যে যা উল্লেখ করেছেন।)


2

রুবি, 192 অক্ষর

$<.map{|l|a,b,c,d,e,f=l.split.map &:to_f
n=(f-d)/(e-c)
puts"(x%+.3f)^2+(y%+.3f)^2=%.3f^2"%[x=-(n*(a+c)+(n*(b-f)-(c+e))*m=(d-b)/(c-a))/2/n-=m,y=-(x+(a+c)/2)/m-(b+d)/2,((a+x)**2+(b+y)**2)**0.5]}

ব্যবহারের উদাহরণ:

$ echo "7.0 -5.0 -1.0 1.0 0.0 -6.0
1.0 7.0 8.0 6.0 7.0 -2.0" | ruby circle.rb
(x-3.000)^2+(y+2.000)^2=5.000^2
(x-3.921)^2+(y-2.447)^2=5.409^2

অ্যাসাইনমেন্টগুলি সন্নিবেশ করানো x, yএবং যদি সম্ভব rহয় তবে কলটিতে সহায়তা করা %উচিত।
লোজ্যাকার

@ জোয়ি: দুঃখিত, প্রশ্নটি পড়ার সময় স্পষ্টতই মিস হয়ে গেলেন। এটি এখনই স্থির করুন।
ভেন্টোরো

1

ওল্ফ্রাম আলফা (27)

আমি বলি, কাজের জন্য উপযুক্ত সরঞ্জামটি ব্যবহার করুন।

equation circle ([Input1],[Input2]),([Input3],[Input4]),([Input5],[Input6])

উদাহরণ এখানে


6
কোনও ইনপুট হ্যান্ডলিং নেই? ইনপুট একাধিক লাইন সমর্থন? আমি বলব যে এটি যোগ্য নয়।
জোয়

0

জাভাস্ক্রিপ্ট (299)

আমি সমাধানের একমাত্র উপায়টি বীজগণিতভাবে এইচ, কে, এবং আর অনুসন্ধানের জন্য তিনটি অজানা জন্য তিনটি সমীকরণ সমাধান করছিলাম।

p=prompt().split(' ');a=p[0],b=p[1],c=p[2],d=p[3],e=p[4],f=p[5];h=((a*a+b*b)*(f-d)+(c*c+d*d)*(b-f)+(e*e+f*f)*(d-b))/(a*(f-d)+c*(b-f)+e*(d-b))/2;k=((a*a+b*b)*(e-c)+(c*c+d*d)*(a-e)+(e*e+f*f)*(c-a))/(b*(e-c)+d*(a-e)+f*(c-a))/2;r=Math.sqrt((a-h)*(a-h)+(b-k)*(b-k));alert("(x-"+h+")²+(y-"+k+")²="+r+"²");

আই / ও উদাহরণ:

7.0 -5.0 -1.0 1.0 0.0 -6.0 -> (x-3)²+(y--2)²=5²

1.0 7.0 8.0 6.0 7.0 -2.0 -> (x-3.9210526315789473)²+(y-2.4473684210526314)² =5.409159155551175²

আমি যে বাগটি দেখতে পাচ্ছি তা হ'ল h বা কে নেতিবাচক থাকলে এটি --পরিবর্তে আউটপুট দেয় +


2
এটি কম্পাস এবং সোজা প্রান্ত দিয়ে করা যেতে পারে। দুটি পয়েন্ট নিন, লাইনটি টানুন যা তাদের দ্বিখণ্ডিত করে। দুটি পয়েন্টের একটি পৃথক জুড়ি নিন, ডিটো। ছেদটি সন্ধান করুন। এটি সংক্ষিপ্ত কোড বাড়ে কিনা, আমার এখনও তদন্ত করতে হবে have
পিটার টেলর

এই ইনপুট শুধুমাত্র একটি লাইন পরিচালনা করে, ডান?
জোয়

@ জো, হ্যাঁ সমস্যাটির জন্য কি একাধিক লাইন পরিচালনা করা প্রয়োজন?
পিটার ওলসন

1
কাজটি থেকে উদ্ধৃত করে: your আপনার প্রোগ্রামের প্রতিটি ইনপুট প্রতিটি লাইন তিনটি পয়েন্টের x এবং y স্থানাঙ্কের সমন্বয়ে থাকবে ... «
জোয়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.