PI и точность числа с плавающей запятой

Во-первых, вам нужно прочитать Рисование в AWT и Swing , чтобы лучше понять, как рисование работает в Swing и AWT.

Далее вам нужно прочитать JavaDocs для Canvas , чтобы лучше понять, какие функции вы можете переопределить.

Одна из трудных для понимания концепций заключается в том, что вы фактически не контролируете систему рисования, которая позаботилась о вас (это как черная магия), вам просто нужно работать с ней, переопределяя соответствующие методы и взаимодействуя с API для запроса обновлений при необходимости.

Самая большая проблема с вашим кодом - public void paint(Graphics g, Drawing d) {. Ничто не собирается вызывать это, поскольку это не метод, который распознает система рисования. Также возник бы вопрос, почему вам нужно передать ссылку Drawing на экземпляр Drawing, не уверенный во всем этом.

Еще одна проблема, с которой вы столкнулись ...

Drawing dr = new Drawing(100, 100, 200, 200);
JFrame frame = new JFrame("My Drawing");
Canvas canvas = new Drawing();
canvas.setBackground(Color.white);

frame.add(dr);

frame.add(canvas);

Вы добавляете два экземпляра Drawing к JFrame, так как по умолчанию работает BorderLayout, только второй будет выложен, первый будет проигнорирован.

Опять же, не знаю почему, просто добавьте первый и покончите с этим.

Что-то, что «работает», может выглядеть примерно так ...

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;

public class Drawing extends Canvas {

    int x1;
    int y1;
    int x2;
    int y2;

    public static void main(String[] args) {

        Drawing dr = new Drawing(100, 100, 200, 200);
        JFrame frame = new JFrame("My Drawing");
        frame.add(dr);
        frame.pack();
        frame.setVisible(true);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 400);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.drawLine(x1, y1, x2, y2);
    }

    Drawing(int x1, int y1, int x2, int y2) {
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
    }

    Drawing() {

    }
}

Вы, кажется, делаете фундаментальные ошибки при использовании API, и я настоятельно рекомендую вам потратить некоторое время на чтение Создание графического интерфейса с помощью JFC / Swing . Вы также обнаружите, что использование что-то вроде JPanel вместо Canvas даст вам лучшую производительность и результаты

11
задан phuclv 19 May 2019 в 00:16
поделиться

5 ответов

#include <stdio.h>

#define E_PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062

int main(int argc, char** argv)
{
    long double pild = E_PI;
    double pid = pild;
    float pif = pid;
    printf("%s\n%1.80f\n%1.80f\n%1.80Lf\n",
    "3.14159265358979323846264338327950288419716939937510582097494459230781640628620899",
    pif, pid, pild);
    return 0;
}

Результаты:

[quassnoi #] gcc --version
gcc (GCC) 4.3.2 20081105 (Red Hat 4.3.2-7)

[quassnoi #] ./test

3.14159265358979323846264338327950288419716939937510582097494459230781640628620899

3.14159274101257324218750000000000000000000000000000000000000000000000000000000000
        ^
3.14159265358979311599796346854418516159057617187500000000000000000000000000000000
                 ^
3.14159265358979311599796346854418516159057617187500000000000000000000000000000000
                 ^
  0000000001111111
  1234567890123456
24
ответ дан 3 December 2019 в 01:29
поделиться

6 мест и 14 мест мест 1 - более чем 0 для этих 3, и последнее место, хотя сохранено нельзя рассмотреть как точку точности.

И извините, но я не знаю то, что расширенный означает без большего количества контекста. Вы имеете в виду десятичное число C#?

3
ответ дан 3 December 2019 в 01:29
поделиться

Печать и количество, ребенок, печать и количество. (Или считайте спецификации.)

3
ответ дан 3 December 2019 в 01:29
поделиться

Мир PI имеет PI к 100 000 000 000 цифрам, Вы могли просто распечатать и выдержать сравнение. Для немного более легкого для чтения Радости версии PI имеют 10 000 цифр. И если Вы хотите помнить цифры сами, Вы могли бы попробовать lerning стихотворение Cadaeic Cadenza.

0
ответ дан 3 December 2019 в 01:29
поделиться

Для кода C посмотрите на определения в <float.h>. Это покрывает float (FLT_*), double (DBL_*) и long double (LDBL_*) определения.

0
ответ дан 3 December 2019 в 01:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: