একটি বৃত্তে পয়েন্টের অবস্থান গণনা করা হচ্ছে


88

আমি এই মুহুর্তে কিছুটা ফাঁকা মনে রাখছি। আমি একটি সমস্যা পেয়েছি যেখানে আমার কেন্দ্রীয় পয়েন্টের চারপাশের পয়েন্টগুলির অবস্থান নির্ণয় করতে হবে, ধরে নিচ্ছি তারা কেন্দ্র থেকে এবং একে অপরের থেকে একে অপরকে সামঞ্জস্যপূর্ণ।

পয়েন্টের সংখ্যাটি পরিবর্তনশীল তাই এটি DrawCirclePoints(int x) নিশ্চিত যে একটি সহজ সমাধান আছে তবে আমার জীবনের জন্য আমি এটি দেখতে পাচ্ছি না :)


4
প্রত্যেকে দুর্দান্ত উত্তর দিয়েছে, দ্রুত পাগল, তাই আমি প্রথম প্রতিক্রিয়াটিকে টিক দিলাম :) তারা সবাই দুর্দান্ত ছিল :)
জোব্রাউন

উত্তর:


74

বৃত্ত যার কেন্দ্র উপর কোণ থেটা এ বিন্দু (x0,y0)যার ব্যাসার্ধ হয় rহয় (x0 + r cos theta, y0 + r sin theta)। এখন theta0 এবং 2pi এর মধ্যে সমানভাবে ব্যবধানযুক্ত মানগুলি চয়ন করুন ।


ক্লাসিক প্রশ্ন- পাই এর মূল্য 3.14 বা 180? (অর্থাত্ ডিগ্রি বা রেডিয়ানে কোণটি রয়েছে?)
নির্জনস্বরে

অবশ্যই রেডিয়ান। আপনি যদি ডিগ্রি ব্যবহার করেন তবে এর পরিবর্তে আপনার 0 এবং 360 এর মধ্যে কোণ দরকার।
গ্যারেথ ম্যাককাগন

8
(পাই এর মান ৩.১৪ সমান, আপনি যেভাবে কোণ লিখতে পছন্দ করেন তা নির্বিশেষে। অবশ্যই এটি এটি।)
গ্যারেথ ম্যাককৌঘান

88

ব্যাসার্ধের দৈর্ঘ্যের আর এবং একটি বৃত্তের কেন্দ্রে একটি কোণ টি দেওয়া এবং একটি বৃত্তের কেন্দ্রে (এইচ, কে) দেওয়া , আপনি নীচ হিসাবে পরিধির উপরের একটি বিন্দুর স্থানাঙ্কগুলি গণনা করতে পারেন (এটি ছদ্ম-কোড, আপনাকে এটি নিজের সাথে মানিয়ে নিতে হবে) ভাষা):


আপনি কোপ ফ্লিপ করেছেন এবং পাপের ক্রিয়াকলাপগুলি x এর জন্য পাপ এবং y এর পক্ষে হওয়া উচিত। প্রায় অন্য উপায় না.
Andreas

18
গণিতে আমার ডিগ্রী, পাশাপাশি এখানে অন্য প্রতিটি উত্তর বলে যে আপনি ভুল।
ব্রায়ান ড্রিসকল

4
এইচএম .. হ্যাঁ, উইকিপিডিয়াতে হ্যাঁ, হ্যাঁ পাপটি এক্স অক্ষ, আমি জানি এটি নিরাপদ উত্স নয় তবে আমি x এবং পাপ ব্যবহার করেছি এবং আমার ঘনকটি সঠিক দিকে চলতে শুরু করেছে। এমনকি আমার গণিতের শিক্ষকও উল্লেখ করেছিলেন যে আমি তাদের উল্টিয়েছি। আপনি কি অন্য কোনও কারণে ভাবতে পারেন যে কেন আমার ঘনকটি লক্ষ্য অবস্থান থেকে দূরে একটি অদ্ভুত বিন্যাসে চলে আসবে এবং তারপরে আমি তাদের উল্টিয়ে দিয়েছিলাম যে এটি এটির অবস্থানে চলে যায়?
আন্দ্রেয়াস

এই কোডটি আমি লিখেছিলাম সম্ভবত আপনি বলতে পারেন কেন এটি তাদের সাথে উল্টে যায়? jsfiddle.net/Lf5sZ
আন্দ্রেয়াস

4
স্ক্রিনের স্থানাঙ্কগুলিতে ধনাত্মক y- অক্ষগুলি বিপরীত হয়, যাতে এটি বোঝা যায়।
ব্রায়ান ড্রিসকোল

52

সি # ব্যবহার করে একটি সমাধান এখানে দেওয়া হয়েছে:

void DrawCirclePoints(int points, double radius, Point center)
{
    double slice = 2 * Math.PI / points;
    for (int i = 0; i < points; i++)
    {
        double angle = slice * i;
        int newX = (int)(center.X + radius * Math.Cos(angle));
        int newY = (int)(center.Y + radius * Math.Sin(angle));
        Point p = new Point(newX, newY);
        Console.WriteLine(p);
    }
}

থেকে নমুনা আউটপুট DrawCirclePoints(8, 10, new Point(0,0));:

{X=10,Y=0}
{X=7,Y=7}
{X=0,Y=10}
{X=-7,Y=7}
{X=-10,Y=0}
{X=-7,Y=-7}
{X=0,Y=-10}
{X=7,Y=-7}

শুভকামনা!


4
দুর্দান্ত! আমার জন্য দুর্দান্ত কাজ করেছে, আমি ইতিমধ্যে এটি পিএইচপি-কায়রোতে অনুবাদ করেছি এবং দুর্দান্ত কাজ করে!
মেলসি

আমি একই ধরণের টাস্কটি করতে চাইছি, তবে আমার ট্রিগ্রেট্রপ / সিকআরসিআর H গিটিহাবের উপর নির্ভরশীল, যখন কোনও ব্যবহারকারী থাম্ব সরান, আমি সেই ব্যক্তির নির্বাচিত অগ্রগতি নির্দেশ করার জন্য একটি চিত্র স্থাপন করতে চাই ... আমার কাছে সমস্ত আছে আমাকে পয়েন্টগুলি কিছুটা
ছাড়িয়ে

4
পারফেক্ট, ধন্যবাদ! শুধু আমি যা খুঁজছিলাম।
প্যাট্রিক হুন্ড

9

উপরের উত্তরগুলির একটিকে বেস হিসাবে ব্যবহার করা, এখানে জাভা / অ্যান্ড্রয়েড উদাহরণ রয়েছে:

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    RectF bounds = new RectF(canvas.getClipBounds());
    float centerX = bounds.centerX();
    float centerY = bounds.centerY();

    float angleDeg = 90f;
    float radius = 20f

    float xPos = radius * (float)Math.cos(Math.toRadians(angleDeg)) + centerX;
    float yPos = radius * (float)Math.sin(Math.toRadians(angleDeg)) + centerY;

    //draw my point at xPos/yPos
}

4

একটি বৃত্তাকার পথে একটি সংখ্যা স্থাপন করা

// variable

let number = 12; // how many number to be placed
let size = 260; // size of circle i.e. w = h = 260
let cx= size/2; // center of x(in a circle)
let cy = size/2; // center of y(in a circle)
let r = size/2; // radius of a circle

for(let i=1; i<=number; i++) {
  let ang = i*(Math.PI/(number/2));
  let left = cx + (r*Math.cos(ang));
  let top = cy + (r*Math.sin(ang));
  console.log("top: ", top, ", left: ", left);
}

3

আমাকে ওয়েবে এটি করতে হয়েছিল, সুতরাং এখানে @ স্কটিয়াবের উত্তরের একটি কফিসিপি সংস্করণ দেওয়া হয়েছে :

points = 8
radius = 10
center = {x: 0, y: 0}

drawCirclePoints = (points, radius, center) ->
  slice = 2 * Math.PI / points
  for i in [0...points]
    angle = slice * i
    newX = center.x + radius * Math.cos(angle)
    newY = center.y + radius * Math.sin(angle)
    point = {x: newX, y: newY}
    console.log point

drawCirclePoints(points, radius, center)

3

সমাপ্তির স্বার্থে, আপনি "কেন্দ্রীয় কেন্দ্রের চারপাশের পয়েন্টের অবস্থান (ধরে নিচ্ছেন তারা কেন্দ্র থেকে সমস্ত সামঞ্জস্যপূর্ণ বলে ধরে নিচ্ছেন)" হিসাবে বর্ণনা করছেন তা "পোলার কোঅর্ডিনেটস" ছাড়া আর কিছুই নয়। আর তুমি পথে জন্য জিজ্ঞাসা করা হয় মেরু এবং কার্টিজিয়ান স্থানাঙ্ক মধ্যে রূপান্তর যা দেওয়া হয় x = r*cos(t), y = r*sin(t)


3

পিএইচপি সমাধান:

class point{
    private $x = 0;
    private $y = 0;
    public function setX($xpos){
        $this->x = $xpos;
    }
    public function setY($ypos){
        $this->y = $ypos;
    }
    public function getX(){
        return $this->x;
    }
    public function getY(){
        return $this->y;
    }
    public function printX(){
        echo $this->x;
    }
    public function printY(){
        echo $this->y;
    }
}
function drawCirclePoints($points, $radius, &$center){
    $pointarray = array();
    $slice = (2*pi())/$points;
    for($i=0;$i<$points;$i++){
        $angle = $slice*$i;
        $newx = (int)($center->getX() + ($radius * cos($angle)));
        $newy = (int)($center->getY() + ($radius * sin($angle)));
        $point = new point();
        $point->setX($newx);
        $point->setY($newy);
        array_push($pointarray,$point);
    }
    return $pointarray;
}

আমি বিশ্বাস করি প্রথম বন্ধনী জন্য ভুল $newxএবং $newy, স্থানাঙ্ক নির্বাণ পথ বৃত্ত ব্যাসার্ধ বাইরে। চেষ্টা করুন $newx = (int)($center->getX() + ($radius * cos($angle)));এবং অনুরূপ $newy
জেসন

1

আপনার প্রতিটি পয়েন্টের মধ্যবর্তী কোণটি এমন হতে চলেছে 2Pi/xযাতে আপনি বলতে পারেন যে পয়েন্টের জন্য n= 0 to x-1একটি নির্ধারিত 0 পয়েন্ট থেকে কোণটি2nPi/x

আপনার প্রথম পয়েন্টটি ধরে (r,0)নিলে (যেখানে কেন্দ্র কেন্দ্র থেকে দূরত্ব রয়েছে) তবে কেন্দ্রীয় পয়েন্টের সাথে সম্পর্কিত অবস্থানগুলি হবে:

rCos(2nPi/x),rSin(2nPi/x)

1

জাভায় ওয়ার্কিং সলিউশন:

import java.awt.event.*;
import java.awt.Robot;

public class CircleMouse {

/* circle stuff */
final static int RADIUS = 100;
final static int XSTART = 500;
final static int YSTART = 500;
final static int DELAYMS = 1;
final static int ROUNDS = 5;

public static void main(String args[]) {

    long startT = System.currentTimeMillis();
    Robot bot = null;

    try {
        bot = new Robot();
    } catch (Exception failed) {
        System.err.println("Failed instantiating Robot: " + failed);
    }
    int mask = InputEvent.BUTTON1_DOWN_MASK;

    int howMany = 360 * ROUNDS;
    while (howMany > 0) {
        int x = getX(howMany);
        int y = getY(howMany);
        bot.mouseMove(x, y);
        bot.delay(DELAYMS);
        System.out.println("x:" + x + " y:" + y);
        howMany--;
    }

    long endT = System.currentTimeMillis();
    System.out.println("Duration: " + (endT - startT));

}

/**
 * 
 * @param angle
 *            in degree
 * @return
 */
private static int getX(int angle) {
    double radians = Math.toRadians(angle);
    Double x = RADIUS * Math.cos(radians) + XSTART;
    int result = x.intValue();

    return result;
}

/**
 * 
 * @param angle
 *            in degree
 * @return
 */
private static int getY(int angle) {
    double radians = Math.toRadians(angle);
    Double y = RADIUS * Math.sin(radians) + YSTART;
    int result = y.intValue();

    return result;
}
}

1

Rউপরের @ পিরিজন উত্তরের উপর ভিত্তি করে এখানে একটি সংস্করণ দেওয়া আছে।

points <- 8
radius <- 10
center_x <- 5
center_y <- 5

drawCirclePoints <- function(points, radius, center_x, center_y) {
  slice <- 2 * pi / points
  angle <- slice * seq(0, points, by = 1)

  newX <- center_x + radius * cos(angle)
  newY <- center_y + radius * sin(angle)

  plot(newX, newY)
}

drawCirclePoints(points, radius, center_x, center_y)

1

এখানে আমি জাভাস্ক্রিপ্ট সহ একটি বৃত্তের একটি বিন্দুটি কীভাবে খুঁজে পেয়েছি, বৃত্তের শীর্ষ থেকে কোণ (ডিগ্রি) গণনা করছি।

  const centreX = 50; // centre x of circle
  const centreY = 50; // centre y of circle
  const r = 20; // radius
  const angleDeg = 45; // degree in angle from top
  const radians = angleDeg * (Math.PI/180);
  const pointY = centreY - (Math.cos(radians) * r); // specific point y on the circle for the angle
  const pointX = centreX + (Math.sin(radians) * r); // specific point x on the circle for the angle

0

ড্যানিয়েলের উপরের উত্তরের উপর ভিত্তি করে পাইথন 3 ব্যবহার করা আমার এখানে।

import numpy


def circlepoints(points,radius,center):
    shape = []
    slice = 2 * 3.14 / points
    for i in range(points):
        angle = slice * i
        new_x = center[0] + radius*numpy.cos(angle)
        new_y = center[1] + radius*numpy.sin(angle)

        p = (new_x,new_y)
        shape.append(p)

    return shape

print(circlepoints(100,20,[0,0]))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.