Initial revision
// // Skeleton$B%G!<%?$rEO$7$F(B, $B%"%&%H%i%$%s$rJV$9(B // public class Renderer { static final boolean debug=false; static Point[] indexToPoints(Point[] points,int[] indices){ int i,len=indices.length; Point[] ret=new Point[len]; for(i=0;i<len;i++) ret[i]=points[indices[i]]; return ret; } public Outline[] elementRenderer(Point[] points,Element element){ int type=element.type; Point[] elementPoints=indexToPoints(points,element.points); switch(type){ case Element.ten: return ten(elementPoints,element.annotations); case Element.tate: return tate(elementPoints,element.annotations); case Element.yoko: return yoko(elementPoints,element.annotations); case Element.migiue: return migiue(elementPoints,element.annotations); case Element.hidari: return hidari(elementPoints,element.annotations); case Element.tatehidari: return tatehidari(elementPoints,element.annotations); case Element.migi: return migi(elementPoints,element.annotations); case Element.kozato: return kozato(elementPoints,element.annotations); case Element.tatehane: return tatehane(elementPoints,element.annotations); case Element.tsukurihane: return tsukurihane(elementPoints,element.annotations); case Element.sanzui: return sanzui(elementPoints,element.annotations); case Element.kokoro: return kokoro(elementPoints,element.annotations); case Element.tasuki: return tasuki(elementPoints,element.annotations); case Element.magaritate: return magaritate(elementPoints,element.annotations); case Element.kagi: return kagi(elementPoints,element.annotations); case Element.shin_nyuu: return shin_nyuu(elementPoints,element.annotations); case Element.hira_long: return hira_long(elementPoints,element.annotations); case Element.hira_circle: return hira_circle(elementPoints,element.annotations); case Element.outline: return outline(elementPoints,element.annotations); } return null; } public Outline[] ten(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] tate(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] yoko(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] migiue(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] hidari(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] tatehidari(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] migi(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] kozato(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] tatehane(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] tsukurihane(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] sanzui(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] kokoro(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] tasuki(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] magaritate(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] kagi(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] shin_nyuu(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] hira_long(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] hira_circle(Point[] points,ElementAnnotation[] annotations){ return null; } public Outline[] outline(Point[] points,ElementAnnotation[] annotations){ return null; } // p0 $B$H(B p1 $B$N4V$rI}(B width $B$GD>@~FyIU$1(B public Outline[] line2(Point p0,Point p1,double width){ Point v0=p1.minus(p0).rot270().normal(width); Outline[] ret=new Outline[2]; OutlineComponent[] right=new OutlineComponent[1]; right[0]=new Line(p0.plus(v0),p1.plus(v0)); OutlineComponent[] left=new OutlineComponent[1]; left[0]=new Line(p0.minus(v0),p1.minus(v0)); ret[0]=new Outline(right); ret[1]=new Outline(left); return ret; } // public Outline curveSub(Point p0, Point p1, Point p2, Point p3, double r0, double r1){ OutlineComponent[] ret=new OutlineComponent[1]; Point p12=Point.cross(p0,p1,p2,p3); if(debug) System.out.println("cross("+p0+","+p1+","+p2+","+p3+")="+p12); ret[0]=new Bezier(p0,p0.inter(p12,r0),p3.inter(p12,r1),p3); return new Outline(ret); } // p0, p1, p2$B$N4V$r6J@~$G7k$V(B // p0 $B$G$OI}(B w0, p2$B$G$OI}(Bw3 // p0$B$+$i(B p1$B$K(Br0(0$B$+$i(B1)$B?J$s$@$H$3$m$GI}(B w1 // p2$B$+$i(B r1(0$B$+$i(B1)$BLa$C$?$H$3$m$GI}(B w2$B$H$J$k(B // $B$?$@$7(B, $B30B&$N%+!<%V$HFbB&$N%+!<%V$N(B Bezier$B@)8fE@$NHfN($,(B // $BF1$8$K$J$k$h$&$K(B public Outline[] curve2(Point p0,Point p1,Point p2, double r0,double r1, double w0,double w1,double w2,double w3){ Point p01=p0.inter(p1,r0),p12=p2.inter(p1,r1); Outline[] ret=new Outline[2]; Point v0=p1.minus(p0).rot270(), v2=p2.minus(p0).rot270(); ret[0]=curveSub(p0.plus(v0.normal(w0)), p0.inter(p1,r0).plus(v0.normal(w1)), p2.inter(p1,r1).plus(v2.normal(w2)), p2.plus(v2.normal(w3)), r0,r1); ret[1]=curveSub(p0.minus(v0.normal(w0)), p0.inter(p1,r0).minus(v0.normal(w1)), p2.inter(p1,r1).minus(v2.normal(w2)), p2.minus(v2.normal(w3)), r0,r1); return ret; } }
ktanaka Powered by ViewCVS 1.0-dev |
ViewCVS and CVS Help |