2011-01-01 9 views
-6

Ich habe diese polare Funktion:Wie wird die polare Funktion auf das kartesische Gitter aufgetragen?

r = A/log(B * tan(t/2 * N)

wobei A, B, N willkürliche Parameter sind und t ist der Winkel theta in dem polaren Koordinatensystem.

Beispiel Diagramm für A=8, B=0.5, N=4

Sample graph

Wie kann ich diese Funktion auf einem cartesianischen Gitterkoordinate plotten, damit ich ein Bild wie die oben bekommen?

dank

+0

-1. Schaue ernsthaft auf http://en.wikipedia.org/wiki/Polar_coordinate_system nach und finde heraus, wie man (r, t) in (x, y) umwandelt. Wenn Sie eine Programmierfrage haben, dann posten Sie sie erneut bei SO. – ja72

+1

@Raoul, Ihre Frage enthielt keinerlei Hinweis auf irgendeine Programmiersprache. Tatsache ist, dass Ihre Frage NPR ist, und nur Ihre Antwort und korrekte Markierung macht es (kaum) so. Auch jemanden als Idioten zu bezeichnen, um korrekt zu sein, ist hier kein akzeptables Verhalten. – Will

+0

Die Programmiersprache ist irrelevant Pseudocode ist gut genug, aber was ich fragte, ist, wie man eine kontinuierliche Kurve wie das Bild, das ich postete, also im Wesentlichen wollte ich wissen, wie man einen Funktionsplotter implementiert, der das Bild produzierte, das ich gezeigt habe. Ich sehe nicht, wie das offtopic ist. Auch ich sehe nicht, wie Jalexiou überhaupt richtig ist, weil er offensichtlich völlig vermisst hat, worum es bei der Frage eigentlich ging. Vielleicht war die Frage nicht klar genug, aber jemanden zu verurteilen, weil das ein inakzeptables Verhalten von meinem POV ist, und ich nenne es, was es ist, wenn es Ihnen gefällt oder nicht. –

Antwort

2

Unvollständige Pseudo-Code Probe, aber man sollte auf die Idee kommen:

for t in [0, 2pi): 
    r = /* whatever you got depending on t */ 
    x = r * cos(t) 
    y = r * sin(t) 
    draw line to (x,y) 
+1

Vielen Dank für Ihre Antwort, aber es tut mir leid zu sagen, dass dies nicht sehr hilfreich ist. Dies wird keine glatte Kurve erzeugen. Wie würdest du das genau mit diesem Pseudocode machen? Bitte erläutern Sie auch, wie man von 0 bis 2pi iteriert, weil dies ein kontinuierlicher Bereich von reellen Zahlen ist, was nicht so einfach ist, wie es Ihr Pseudocode ausmacht. –

+4

Die Antwort entspricht genau der Frage. Niemals in der ursprünglichen Frage, dass die Antwort eine glatte Kurve (nach welchen Kriterien?) – ja72

+0

@ Jalexiou Ich habe geschrieben, "so bekomme ich ein Bild wie die oben" –

1

Ok, ich es herausgefunden. Ein Beispiel für einen Java-Code:

import static java.lang.Math.*; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Point; 
import java.awt.image.BufferedImage; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 


public class TestPolarPlot { 
    public static void main(String[] args) { 
    final int width = 512; 
    final int height = 512; 
    BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR); 
    Graphics g = img.getGraphics(); 
    g.setColor(Color.black); 
    g.fillRect(0, 0, width, height); 
    g.setColor(Color.white); 
    final double A = 8; 
    final double B = 0.5; 
    final double N = 4; 
    final double scale = 128; 
    final double zoom = 50; 
    final double step = 1/scale; 
    Point last = null; 
    final Point origin = new Point(width/2, height/2); 

    for (double t = 0; t <= 2*PI; t+= step) { 
     final double r = zoom * polarFunction(t, A, B, N); 
     final int x = (int)round(r * cos(t)); 
     final int y = (int)round(r * sin(t)); 
     Point next = new Point(x, y); 
     if (last != null) { 
      g.drawLine(origin.x + last.x, origin.y + last.y, 
       origin.x + next.x, origin.y + next.y); 
     } 
     last = next; 
    } 

    JFrame frame = new JFrame("testit"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().add(new JLabel(new ImageIcon(img))); 
    frame.pack(); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
} 

    public static double polarFunction(double t, double A, double B, double N) { 
     return A/log(B * tan(t/(2 * N))); 
    } 
} 

Ich habe nicht erwartet, dass dies glatte Kurven erzeugt, aber es funktioniert ziemlich gut.

alt text alt text

+2

Also von "ich es herausgefunden", meinen Sie " Ich nahm die Idee, dass ich sagte, war nutzlos, versuchte es und fand heraus, dass es tatsächlich funktioniert ". – cHao

Verwandte Themen